[料理佳餚] 在 CentOS 7 與 ELK(Elasticsearch + Logstash + Kibana)初次相遇

  • 15699
  • 0
  • ELK
  • 2016-09-21

ELK(Elasticsearch + Logstash + Kibana) 是這兩三年來很火紅的日誌收集分析平台,尤其是 Logstash 的部分,提供了各式各樣的日誌收集及輸出的 Plugin,搭配 Elasticsearch 這種分散的索引搜尋系統,收集日誌只是一塊蛋糕而已,如果你有收集大量日誌的需求可以考慮用 ELK,畢竟 Splunk 很貴啊啊啊!

下面是我從安裝 ELK 到用 Kibana 拉出一個統計圖的過程。

安裝 Elasticsearch

請參考[料理佳餚] 在 CentOS 7 安裝 Elasticsearch 分散式搜尋系統這篇文章安裝 Elasticsearch。

此時此刻,Elasticsearch 的版本已經更新到 2.3.2 了。

關於 Elasticsearch 在 CentOS 7 底下的優化

Elasticsearch 有一些關於在 CentOS 7 底下記憶體、檔案等資源使用的最佳化參數,我特別記錄下來提供給大家參考。

關閉 Swapping

修改 /etc/elasticsearch/elasticsearch.yml 檔案,設定下列參數:

bootstrap.mlockall: true

修改 /etc/sysconfig/elasticsearch 檔案,設定下列參數:

MAX_LOCKED_MEMORY=unlimited

修改 /usr/lib/systemd/system/elasticsearch.service 檔案,設定下列參數:

LimitMEMLOCK=infinity

配置 Heap Size

修改 /etc/sysconfig/elasticsearch 檔案,設定下列參數:

ES_HEAP_SIZE=10g

Heap Size 預設是 256m ~ 1g,建議設定一個固定的值,但是不要超過實體記憶體的 50%,最大不要超過 32g。

開放對記憶體及檔案的安全性鎖定

修改 /etc/sysconfig/elasticsearch 檔案,設定下列參數:

MAX_OPEN_FILES=65535

修改 /etc/security/limits.conf 檔案,附加下列資訊:

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

設定 FQDN(Fully Qualified Domain Name)

如果我們的訊息在傳輸的過程需要 SSL 加密,則這個步驟一定要做,這是在建立 SSL 憑證的時候需要用到。

修改 /etc/hostname 檔案,修改成下列內容:

elk.ooxxgg.com

修改 /etc/hosts 檔案,附加下列資訊:

127.0.0.1       xxyyzz
192.168.8.101   elk.ooxxgg.com     elk

執行刷新系統環境指令

hostname -F /etc/hostname

產生 SSL 憑證(需要的話)

切換到 /etc/pki/tls 目錄,執行下列指令:

openssl req -subj '/CN=elk.ooxxgg.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

安裝 Kibana

增加 Kibana YUM Repository URL

echo "[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1" | tee /etc/yum.repos.d/kibana.repo

用 YUM 安裝 Kibana

yum install -y kibana

打開防火牆 5601 端口

firewall-cmd --permanent --add-port=5601/tcp
firewall-cmd --reload

設定 Kibana 為背景服務

systemctl daemon-reload
systemctl enable kibana.service

啟動 Kibana

systemctl start kibana.service

有一點要注意一下,Kibana 預設指定的 Elasticsearch 伺服器位址是在 http://localhost:9200,如果我們的 Elasticsearch 不是 host 在 http://localhost:9200,我們需要修改 elasticsearch.url 參數值,請參考下面設定步驟。

修改 /opt/kibana/config/kibana.yml 檔案,設定下列參數:

elasticsearch.url: "http://192.168.8.101:9200"

安裝成功之後,在瀏覽器輸入 http://[我們的 Kibana 伺服器]:5601 就會得到下面的畫面。

安裝 Logstash

接下來就是我們的重頭戲啦,Logstash 是整個 ELK 的靈魂,即使不用 Elasticsearch 及 Kibana,我們依然可以用 Logstash 自訂自己的輸入及輸出來收集日誌。

增加 Logstash YUM Repository URL

echo "[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=http://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1" | tee /etc/yum.repos.d/logstash.repo

用 YUM 安裝 Logstash

yum install -y logstash

設定 Logstash 為背景服務

systemctl daemon-reload
systemctl enable logstash.service

Logstash 的用法

Logstash 處理資料的方式就像 Pipeline 一樣:輸入資料 -> 過濾資料 -> 輸出資料,整個概念就是這樣而已,要做一組「輸入資料 -> 過濾資料 -> 輸出資料」這樣的日誌收集程序,需要用 Logstash 獨特的語法去撰寫設定檔,為什麼說獨特呢?因為它的格式很像 JSON 又不是 JSON,很像 Rubydebug 又不是 Rubydebug,而且還可以在裡面寫邏輯運算,所以我說獨特。

「輸入資料 -> 過濾資料 -> 輸出資料」就是下面這三大區塊,所有的變化就都在這三大區塊裡面去組合。

input {
}
filter {
}
output {
}

寫入第一筆 Log

我這邊寫了一組設定檔,底下我有稍微寫一下說明,而這組設定檔我沒有用到 filter。

input {
    stdin { }
}
output {
    elasticsearch {
        hosts => ["192.168.8.101"]
    }
    stdout { }
}

input

  • stdin:接收畫面上的輸入。

output

  • elasticsearch:輸出到 host 在 192.168.8.101 的 Elasticsearch。
  • stdout:輸出到畫面上。

我們把設定儲存起來之後,給它一個檔名假設叫 stdin_to_elasticsearch.conf,我們就可以執行下面的指令把 Logstash 叫起來。

/opt/logstash/bin/./logstash -f stdin_to_elasticsearch.conf

我們這邊是用 stdin 畫面輸入的方式讓 Logstash 接收 Log,因此我們在畫面上輸入一些訊息讓 Logstash 收走,這樣我們就成功地餵一筆 Log 給 Logstash,並且將 Log 儲存在 Elasticsearch 裡面。

用 Kibana 產生第一張統計圖

Kibana 裝起來之後我們還會看到它要我們建立一個 Index Pattern,Logstash 預設會每天建立一個 Index 把當天的 Log 寫到當天的 Index 裡面,預設的 Index 命名方式就是 logstash-%{+YYYY.MM.dd},所以看到下面這個畫面也不要害怕,就按下 Create 就對了。

我們切換到 Discover 頁籤,就可以看到我們剛剛塞進去的 Log。

接著我們切換到 Visualize 頁籤,選擇我們要產生的統計圖表類型之後,這邊預設 Y 軸是 Log 的數量,我們還必須指定 X 軸的維度欄位。

最後按下 Apply changes 統計圖表就會出來。

關於 ELK 的應用重點在於 Logstash 的設定以及 Kibana 報表的展示,官方提供很多有關於 Logstash 及 Kibana 的資源,光 Logstash 的 Input PluginsOuput Plugins 就嚇死人得多,之後有機會的話我還會把我在 ELK 上的應用場景 post 上來。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學