引言

最近剛剛完成一個項目,包括之前零零散散也有好幾個項目了,也都是用docker進行佈署,然後發現都沒有收集日誌。所以決定搞個日誌伺服器。

調研

  1. 自己搭建ELK服務。
  2. 使用收費的第三方服務,如logz.io

考慮了一番,決定自己還是搭一套,畢竟還有一臺阿里雲的機器空在那邊

搭建

搭建ELK還是比較簡單的,大家可以參考我用的docker-compose stevenQiang/docker-elk,我所使用的ELK已經在正常使用了。我還用了nginx把ELK封裝了一下,然後還搞了一個比較簡單的nginx的auth,使用htpasswd。後續還會開發一個第三方的登錄頁面或內網訪問。

剛開始開放了N個埠,非常之傻,後來全部改成了expose,只開放了logstash的5044和nginx(kibana)的8080埠。也是為了安全,目前logstash還沒有加上ssl驗證,後繼也會加上。

tips:服務剛開始佈署在送的騰訊雲上面,然後第二天就被黑了,我也很無奈,不知道啥玩意。所以就把一些埠全部關閉,並加驗證,本來我太懶了~

filebeat接收日誌

ELK搭完之後,然後發現怎麼接收日誌呢,剛剛開始想使用nginx的server_log,一直都發不出去,研究了一下,也沒發現個所以然。後來索性放棄,尋找其他方式。

最後決定使用filebeat來發送日誌,只需要在你服務的docker-compose裡面在加一個filebeat就可以了,具體的內容可以看我stevenQiang/docker-elk裡面的filebeat目錄,只需要把你nginx的日誌映射到主機,然後filebeat去讀取就行,大概30s會發送一次。

服務上面的配置

filebeat:
build:
context: filebeat/
restart: always
environment:
- logstash=*.*.*.*
- logstash_port=5044
volumes:
- /home/data/nginx/log:/data/logs/data/nginx

架構圖

結尾

自己搭完之後,然後把之前的所有服務的日誌都遷了過來,包括django,celery,rails等一系列。用起來還是非常舒服的。

效果圖

推薦閱讀:

查看原文 >>
相關文章