基於Docker搭建ELK 日志系統的方法
背景需求:
業務發展越來越龐大,服務器越來越多 各種訪問日志、應用日志、錯誤日志量越來越多,導致運維人員無法很好的去管理日志 開發人員排查問題,需要到服務器上查日志,不方便 運營人員需要一些數據,需要我們運維到服務器上分析日志。
ELK介紹:
ELK是三個開源軟件的縮寫,分別為:Elasticsearch 、 Logstash以及Kibana , 它們都是開源軟件。 目前由於原本的ELK Stack成員中加入瞭 Beats 工具所以已改名為Elastic Stack。 Beats,它是一個輕量級的日志收集處理工具(Agent),占用資源少,適合於在各個服務器上搜集日志後傳輸給Logstash,官方也推薦此工具。
搭建步驟:
經過上述描述,大傢也應該稍微有點瞭解瞭,想要搭建這個平臺至少是需要3/4個軟件的(可以沒有filebeat)。
- kibana 用於展示
- elasticsearch 用於檢索
- logstash 用於過濾
- filebeat 用於收集日志
本篇文章假定你已經有瞭docker環境,並且有基本的docker使用經驗
拉取鏡像(統一版本可以避免很多坑):
docker pull kibana:6.8.2 docker pull elasticsearch:6.8.2 docker pull mobz/elasticsearch-head:5 # es的一個插件 docker pull logstash:6.8.2 docker pull docker.elastic.co/beats/filebeat:6.8.2 # 很慢 可以嘗試設置代理或者更改docker鏡像源
Docker 設置代理在linux中可以使用ClashX 訂閱url,然後docker 連到代理。有桌面的可以直接更改,沒有的也可以創建配置文件進行更改 ⇒ 傳送門
另外把docker的內存給多一點兒,避免到時候卡頓。
構建ES:
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" elasticsearch:6.8.2
瀏覽器訪問(curl也行):localhost:9200 出現下面的結果則說明啟動成功:
若出現錯誤,請查錯誤日志。
創建ES-HEAD:
docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5
同樣訪問localhost:9100,看到下面的結果即為成功:
在es-head連接es可能是連不上的,是因為es沒有開啟跨域,進入es容器內部 找到config文件下的elasticsearch.yml,在此文件中增加:
http.cors.enabled: true http.cors.allow-origin: "*"
然後重啟es後es-head就可以連接上es。
開啟Kibana:
docker run -d -p 5601:5601 --link elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana:6.8.2
這裡就是http://elasticsearch:9200,不要更改,前面使用瞭–link,會在kibana容器hosts文件中加入elasticsearch ip地址,這樣我們就直接通過定義的name來訪問es服務瞭。
容器啟動成功後,es-head裡面應該就能看到下面的信息:
訪問localhost:5601會出現下面的結果:
至此我們的kibana已經成功跑起來瞭,es也已經跑起來瞭,接下來就是收集日志的服務瞭。
構建filebeat 和 logstash:
首先聲明,這兩兄弟需要點兒配置文件,我們想整個文件夾統一存放這兩份配置文件:
mkdir elktest # 在主目錄下 即:~/elktest 路徑 cd elktest touch filebeat.yml touch logstash.conf
添加配置文件
vim filebeat.yml
filebeat.prospectors: - paths: - /home/elk/logs/user/a.log multiline: pattern: ^\d{4} negate: true match: after fields: doc_type: user - paths: - /home/elk/logs/service/a.log multiline: pattern: ^\d{4} negate: true match: after fields: doc_type: service output.logstash: # 輸出地址 hosts: ["logstash:5044"]
vim logstash.conf
input { beats { port => "5044" } } filter { json { source => "message" } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ "elasticsearch:9200" ] index => "%{[fields][doc_type]}-%{+YYYY.MM.dd}" } }
當前你應該還在elktest目錄下,由於我們沒有日志來源,所以本片的方式是手動創建日志,建立一個日志文件夾:
mkdir logdir
自己構建一些日志,隨便寫什麼,文件及文件夾名稱不要改動,已經在配置文件中對應好瞭,構建完成之後你的目錄結構應該長這個樣子:
創建容器:
docker run -it --name logstash --link elasticsearch -d -p 5044:5044 -v ~/elktest/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:6.8.2 docker run --name filebeat --link logstash -d -v ~/elktest/filebeat.yml:/usr/share/filebeat/filebeat.yml -v ~/elktest/logdir/user/:/home/elk/logs/user/ -v ~/elktest/logdir/service/:/home/elk/logs/service/ docker.elastic.co/beats/filebeat:6.8.2
此時你的es-head應該長這個樣子:
如果不是這個樣子,可以查看容器是否運行,是否有錯誤日志,另外也可以到logstash容器中ping elasticsearch,filebeat容器中ping logstash,檢查路徑是否有問題。
Kibana顯示: 創建索引向:
創建完成後去查看,添加自己想要查看的字段,內容在message裡(剛好就是我們在a.log中的內容):
到此為止,我們的elk已經搭建完成瞭,成功搭建的小夥伴晚飯給自己加個雞腿!!!!
以上就是基於Docker搭建ELK 日志系統的方法的詳細內容,更多關於Docker搭建ELK日志系統的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Docker Compose一鍵ELK部署的方法實現
- 使用Docker Compose搭建部署ElasticSearch的配置過程
- Security安裝 Elastic SIEM 和 EDR的超詳細教程
- docker安裝elastic search的詳細過程
- Java elasticsearch安裝以及部署教程