本文獲得了原作者的授權,轉載本文需要註明來自EAWORLD公眾號。
作者:Daniel Berman
譯者:張斌
想要重複部署你的ELK STACK更方便一點?在這篇帖子中,我們來看看如何通過使用Ansible來實現這一點。
通常,安裝ELK很容易。
但是,為了開發與測試的目的,你可能會發現自己重複安裝了堆棧這一套東西。雖然安裝過程夠簡單,且不超過5分鐘,但使用一個單行解決方案來安裝和配置各組件會更好。
這就是Ansible可派上用場的地方。
Ansible可以使你自動創建、配置和管理機器。你無需再手動更新伺服器、進行配置、移動文件等,而是可以使用Ansible通過一臺控制機器為一組伺服器自動實施這樣的操作。
本文介紹如何使用Ansible 劇本在遠程伺服器上設置ELK(5.x版本)進行開發。它將帶你完成安裝Ansible的步驟,連接到目標伺服器,執行該劇本,並建立初始的日誌流水線。
讓我們開始吧!
如果你已經安裝了Ansible,那麼很好。如果沒有安裝,這裡有幾個簡短提示,幫你在計劃用於訪問伺服器的計算機上進行安裝。你需要在此計算機上安裝Python 2.x。
以我為例,我在Mac OS X上安裝了Ansible:
sudo easy_install pipbook
sudo pip install ansible
對於其他作業系統,請查看Ansible的在線文檔。
接下來,我們將確保可以連接目標VM,我們要在以AWS上運行的Ubuntu 16.04實例上安裝ELK,以本教程為例。
首先,你需要編輯Ansible主機文件(/etc/ansible/hosts)。在這個文件中,你通常會列出你希望使用Ansible來管理的伺服器與主機組。我將定義一個伺服器組,並列出其伺服器IP與用戶名:
[elkservers]
52.90.104.179 ansible_user=ubuntu
Ansible使用多種默認設置運行。要覆蓋這些設置,你可以編輯/etc/ansible/ansible.cfg文件。
我將使用此選項進入我計劃用來訪問遠程伺服器的.pem文件位置:
[defaults]
private_key_file=/path/to/keyfile.pem
一切都設置好了。要測試連接,請使用以下命令ping伺服器。
ansible elkservers -m ping
你應該看到以下結果:
{
"changed": false,
"ping": "pong"
}
提示:默認情況下,Ansible使用Python 2解釋器。意思是說,如果目標VM正運行Python 3及以上版本,則你需要在命令中添加『-e 『ansible_python_interpreter=/usr/bin/python3』。
由於我們已經使用Ansible建立了與伺服器的連接,因此我們可以使用Ansible ELK Playbook(https://github.com/DanielBerman/ansible-elk-playbook)來進行部署。
該劇本遵循經典的Ansible劇本結構:
site.yml定義了我們要連接的伺服器、sudo權限假設和我們希望執行的角色。將各類事項列在這裡,Ansible將通過此文件中設置的順序來執行角色。
目前該劇本的配置是搭建ELK STACK和Metricbeat,以便進行伺服器監控。要使用Filebeat替代日誌文件,只需切換此文件中的角色。
Java角色在目標伺服器上安裝Java 8。
Elasticsearch角色則搭建Elasticsearch apt repo、安裝Elasticsearch,並將一些配置應用於'elasticsearch.yml'文件。如果要更改安裝的ELK版本,請在Elasticsearch repo任務中編輯repo URL。
這裡要注意的是,為了簡單起見,這個文件中的'network.host'指令設置為'0.0.0.0'以進行遠程訪問。如果你打算在生產中執行此劇本,請勿使用此設置,而應該綁定到本地主機(localhost)。
Kibana角色用來安裝與配置Kibana。同樣的,「server.host」設置為「0.0.0.0」,你需要將其設置為不同的IP。
Filebeat和Metricbeat角色使用其默認設置安裝並啟動這些日誌收集器(shipper)。在Metricbeat的情況下,這足以開始監控你的伺服器。在Filebeat的情況下,你最有可能希望為角色添加一些可執行任務來定義要用日誌記錄的文件。
在Ansible主機上,下載並訪問該劇本:
git clone https://github.com/DanielBerman/ansible-elk-playbook.git
cd ansible-elk-playbook
使用此命令執行該劇本:
sudo ansible-playbook site.yml
Ansibler創建了與目標主機的連接,並開始執行各種角色與任務。
整個執行的輸出應該看起來像這樣(「失敗」進程的上限應為0):
PLAY RECAP ****************************************************************
52.90.104.179 : ok=18 changed=17 unreachable=0 failed=0
如果一切都按預期工作,你所需要做的就是使用以下URL訪問Kibana(替換為你安裝ELK的伺服器IP):
http://<serverhost>:5601
打開Kibana頁面後,你仍然需要定義索引模式。
在本例中我們安裝Metricbeat進行伺服器性能監控,輸入'metricbeat- *'作為索引模式,並選擇@timestamp欄位作為時間過濾欄位名稱:
點擊創建按鈕,將看到Kibana的「Discover」選項卡顯示的數據:
我使用這本劇本來跟進和使用Elasticsearch、Logstash、Kibana和各種Beats中的最新功能。使用Ansible有一定的約束(比如YAML語法)和學習曲線,但什麼技術沒有呢?除了安裝Ansible的命令,你只需使用2-3個命令就能安裝並使其運行。
請記住,這個劇本的只是一個基本的ELK部署,也只適用於某些開發環境。為了使其適合生產,對角色的修改最有可能包括添加Logstash角色來處理日誌、添加用於代理Kibana的nginx角色,並稍稍修改Elasticsearch和Kibana配置文件以確保安全性。
我會儘快使用Ansible模板添加一些支持,幫助大家使用Filebeat把日誌輸送到Logz.io上。
歡迎反饋和PR!
Logz.io是一個基於開源ELK STACK的支持AI的日誌分析平臺,可用於監控應用程式和雲基礎設施。今天就開始免費試用它或者要求免費演示吧!
原文連結:https://logz.io/blog/elk-stack-ansible/
關於作者
丹尼爾·伯曼(Daniel Berman)是Logz.io的產品傳播者。他熱衷於日誌分析、大數據、雲計算、家庭,愛好跑步、利物浦足球俱樂部,以及寫寫關於顛覆性高科技東西的文章。在推特上@proudboffin關注他。
關於EAWorld
微服務,DevOps,元數據,企業架構原創技術分享,EAii(Enterprise Architecture Innovation Institute)企業架構創新研究院旗下官方微信公眾號。
微信號:eaworld,長按二維碼關注
8月-9月,PWorld系列技術趴還將繼續上演。目前,9月24日將在上海舉行PWorld MeetUP「微服務的編排、配置與12要素專場」已啟動報名,戳「閱讀原文」可直達報名頁面,並了解更多詳情~
PWorld軟體架構&平臺創新大會:由普元發起主辦的全國頂級技術盛會,探討「數位化時代的企業軟體變化與創新」推進中國企業在數位化時代的成功轉型,積極為CTO、CIO、架構師、技術經理、開發工程師等技術相關人員設計各項議題,演講嘉賓從企業軟體、人工智慧、區塊鏈、雲計算、大數據、業務流程、移動開發等熱門話題中,分享他們的技術見解和最佳實踐。同時,PWorld在企業級技術會議裡獨開「交互式體驗」先河、賦予參會者最大程度尊重,帶給現場以及線上的聽眾以全新的參會體驗。