1. 程式人生 > >記錄日誌系統ELKB 5.6.4的搭建過程

記錄日誌系統ELKB 5.6.4的搭建過程

logstash elk stack 集中式日誌系統

前言

ELK是最近比較流行的免費的日誌系統解決方案,註意,ELK不是一個軟件名,而是一個結局方案的縮寫,即Elasticsearch+Logstash+Kibana(ELK Stack),其中Logstash負責日誌的采集和過濾,Elasticsearch負責日誌的存儲,Kibana是一個前端頁面,可以使使用者在web界面去查看情況而且可以配置監控功能。這哥幾個都是java系的產品,但是眾所周知,java的東西很吃內存和CPU,Logstash在當作為收集日誌的Agent時,顯得太臃腫了。聽說直播平臺“鬥魚”團隊很為logstash占用資源的情況很而苦惱,後來為了解決這個問題,他們自己寫了一個agent。不過後來官方在logstash-forwarder的基礎上推出了beat系列,裏面包括四個兄弟,分別是:Packetbeat(搜集網絡流量數據);Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據);Filebeat(搜集文件數據);Winlogbeat(搜集 Windows 事件日誌數據)。而Filebeat也就這樣加入了“日誌收集分析”的團隊裏,所以雖然大家還是習慣性的叫ELK,其實準確的說法已經是ELKB了。


ELKB這幾個哥們的分工如下:

  1. Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基於 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有復雜的搜索功能;

  2. Logstash:數據收集額外處理和數據引擎。它支持動態的從各種數據源搜集數據,並對數據進行過濾、分析、豐富、統一格式等操作,然後存儲到用戶指定的位置;

  3. Kibana:數據分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;

  4. Filebeat:ELK 協議棧的新成員,在需要采集日誌數據的 server 上安裝 Filebeat,並指定日誌目錄或日誌文件後,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。


設計架構

技術分享圖片

本文的設計結構就是這樣,其中紅色的redis/RebbitMQ部分可以省略(我這個例子裏暫省略),讓日誌直接傳遞到logstash,如果日誌量較大,最好還是添加上redis,同時再橫向擴容Elasticsearch,搞成一個集群。


對於這幾個模塊服務器多說幾句:

1)Logstash要選擇計算能力強的,CPU和內存比較豐滿的;

2)Elasticsearch要選擇磁盤容量大的,同時CPU和內存也比較豐滿的;


實驗軟件版本

Elasticsearch 5.6.4

Logstash 5.6.4

Kibana 5.6.4 下載地址:

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.6.4-linux-x86_64.tar.gz

Filebeat 5.6.4 下載地址:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.4-x86_64.rpm

Java 1.8+,安裝方法:http://blog.51cto.com/chenx1242/2043924


由於ELKB這幾個東西都是墻外的,墻內的下載可能會比較費勁。所以我稍後會把所有ELKB的5.6.4程序都放在51CTO的存儲空間裏,需要的朋友可以去下載,還是那話,雖然ELK升級頻率很快,但是5.6.4已經足夠穩定了。


實驗服務器情況

服務器名稱服務器IP服務器情況服務器用途
func-auc-001 10.117.32.243阿裏雲Centos 6.5 2核2G
這個auc是我公司的一個內部java模塊,會產生日誌。將filebeat安裝在這個機器上;
chen-logstash-00110.162.80.171阿裏雲Centos 7.4 2核4G(JAVA1.8.0)Logstash
chen-elk-00110.162.80.192阿裏雲Centos 7.4 2核8G(JAVA1.8.0)Elasticsearch+Kibana
nginx直接使用阿裏雲負載均衡取代


安裝Elasticsearch 5.6.4(以下所有操作都是root下進行的)

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.rpm
rpm -ivh elasticsearch-5.6.4.rpm


然後編輯/etc/elasticsearch/elasticsearch.yml,不然的話logstash無法與之相連:

network.host: 0.0.0.0    #取消註釋,並且改成0.0.0.0
http.port: 9200    #取消註釋


保存之後,啟動並且添加開機啟動:

systemctl start elasticsearch     
systemctl enable elasticsearch

技術分享圖片


安裝Logstash 5.6.4(以下所有操作都是root下進行的)

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.6.4.rpm 
rpm -ivh logstash-5.6.4.rpm

如果安裝的時候爆錯:/usr/share/logstash/vendor/jruby/bin/jruby: line 388: /usr/bin/java: No such file or directory。那麽就先#which java查看一下java的文件,然後做一個軟連接過去,然後重裝logstash即可,如圖:

技術分享圖片

技術分享圖片


用戶可以使用 TLS 雙向認證加密 Filebeat 和 Logstash 的連接,保證 Filebeat 只向可信的 Logstash 發送加密的數據。同樣的,Logstash 也只接收可信的 Filebeat 發送的數據。這個功能默認是關閉的,要開啟的話需要先#vim /etc/pki/tls/openssl.cnf,如圖:

技術分享圖片


找到[ v3_ca ]的字段,在底下添加“subjectAltName = IP:logstash的內網IP”字段,保存退出來到/etc/pki/tls/,執行

openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

來生成一個期限為365天的IP SAN證書對,如圖:

技術分享圖片


安裝完畢之後,#vim /etc/logstash/logstash.yml,編輯成如下的樣子:

技術分享圖片


然後在/etc/logstash/下手動建立一個目錄conf.d,在conf.d裏新建一個logstash.conf的文件,如下:

$ cat /usr/local/logstash/config/conf.d/logstash.conf
#在輸入部分,配置Logstash通信端口以及添加SSL證書,從而進行安全通信。
input {
 beats {
   port => 5044
   ssl => true
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

#在過濾器部分,我們將使用Grok來解析這些日誌,然後將其發送到Elasticsearch。以下grok過濾器將查找“syslog”標記的日誌,並嘗試解析它們,以生成結構化索引。
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

#輸出部分,我們將定義要存儲的日誌位置
output {
 elasticsearch {
  hosts => [ "10.162.80.192:9200" ]                #這個地址是elasticsearch的內網地址
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}


然後就是啟動並且添加開機自啟動

systemctl start logstash        
systemctl enable logstash













參考資料:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html

參考資料:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/

參考資料:http://www.jinsk.vip/2017/05/24/elksetup/

參考資料:https://renwole.com/archives/661

參考資料:https://www.zybuluo.com/dume2007/note/665868

參考資料:https://www.elastic.co/guide/en/beats/libbeat/5.6/getting-started.html

參考資料:https://discuss.elastic.co/search?q=ERR%20Failed%20to%20publish%20events%20caused%20by%3A%20read%20tcp

參考資料:http://jaminzhang.github.io/elk/ELK-config-and-use-Filebeat/ (這個博主很好,但是就是博客無法留言,這點比較坑)


記錄日誌系統ELKB 5.6.4的搭建過程