介紹
ELK是業界標準的日誌採集,儲存索引,展示分析系統解決方案
logstash提供了靈活多樣的外掛程式支援不同的input/output
主流使用redis/kafka作為日誌/訊息的中間環節
如果已有kafka的環境了,使用kafka比使用redis更佳
以下是一個最簡化的配置做個筆記,elastic官網提供了非常豐富的文檔
不要用搜尋引擎去搜尋,沒多少結果的,請直接看官網文檔
採用的ELK/kafka版本
elasticsearch-2.x
logstash-2.3
kibana-4.5.1
Kafka 0.9.0.1
應用/網路 環境
Nginx機
10.0.0.1
Kafka群集
10.0.0.11
10.0.0.12
10.0.0.13
Elasticsearch機
10.0.0.21
整體說明
資料流向
日誌/訊息整體流向
logstash => kafka => logstash => elasticsearch => kibana
安裝
elk所有安裝都可以使用rpm二進位包的方式,增加elastic官網的倉庫repo就可以用yum安裝了
elasticsearch看這裡
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html
logstash看這裡
https://www.elastic.co/guide/en/logstash/current/installing-logstash.html
kibana看這裡
https://www.elastic.co/guide/en/kibana/current/setup.html
安裝概覽
nginx機 10.0.0.1
運行nginx的日誌格式化為json
運行logstash輸入input從nginx json,輸出output到kafka
kafka群集 10.0.0.11 10.0.0.12 10.0.0.13
kafka群集Topic為logstash
elasticsearch機10.0.0.21
運行elasticsearch
運行logstash輸入input從kafka,輸出output到elasticsearch
Nginx機
nginx日誌格式化為json
在nginx的 http{} 中定義一個名為logstash_json格式化,格式化日誌為json
log_format logstash_json '{ "@timestamp": "$time_local", '
'"@fields": { '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"request": "$request", '
'"request_method": "$request_method", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';
在server{} 中增加記錄logstash_json日誌,可以用原有的日誌輸出共存
access_log /data/wwwlogs/iamle.log log_format;
access_log /data/wwwlogs/nginx_json.log logstash_json;
logstash日誌採集配置
/etc/logstash/conf.d/nginx.conf
input {
file {
path => "/data/wwwlogs/nginx_json.log"
codec => "json"
}
}
filter {
mutate {
split => [ "upstreamtime", "," ]
}
mutate {
convert => [ "upstreamtime", "float" ]
}
}
output {
kafka {
bootstrap_servers => "10.0.0.11:9092"
topic_id => "logstash"
compression_type => "gzip"
}
}
Kafka群集
建立一個Topic
建立一個Topic叫做
logstash
Topic
每條發布到Kafka叢集的訊息都有一個類別,這個類別被稱為topic。(物理上不同topic的訊息分開儲存,邏輯上一個topic的訊息雖然儲存於一個或多個broker上但使用者只需指定訊息的topic即可生產或消費資料而不必關心資料存於何處)
Elasticsearch機
logstash把資料從kafka存到elasticsearch的配置
其中選取kafka群集任意一個有zk的ip做串連使用
topic_id就是kafka中設定的topic logstash
/etc/logstash/conf.d/logstashes.conf
input {
kafka {
zk_connect => "10.0.0.13:2181"
topic_id => "logstash"
}
}
filter {
mutate {
split => [ "upstreamtime", "," ]
}
mutate {
convert => [ "upstreamtime", "float" ]
}
}
output {
elasticsearch {
hosts => ["10.0.0.21"]
index => "logstash-iamle-%{+YYYY.MM.dd}"
document_type => "iamle"
workers => 5
template_overwrite => true
}
}
補充說明
以上是主要的配置,就差kibana的查看/展示了
kibana
我這裡kibana和elasticsearch是同一台機器
官方yum方式安裝的kibana設定檔在
/opt/kibana/config/kibana.yml
需要改2個地方,監聽連接埠和es的串連資訊
server.host: "10.0.0.21"
elasticsearch.url: "http://10.0.0.21:9200"
啟動kibana /etc/init.d/kibana start後可以通過 http://10.0.0.21:5601 訪問
kibana的使用的多看官網文檔,網上中文的資料不多,關於elk有一本饒琛琳寫的
ELKstack 中文指南
https://www.gitbook.com/book/chenryn/kibana-guide-cn/details
kibana Discover 過濾靜態檔案
NOT \/static AND NOT \/upload\/
elasticsearch
官方yum方式安裝的elasticsearch設定檔在
/etc/elasticsearch/elasticsearch.yml
需要配置下監聽ip,預設是127.0.0.1
network.host: 10.0.0.21
path.data: /data
elasticsearch安裝了head外掛程式後可以看到es狀態
http://10.0.0.21:9200/_plugin/head/
安全問題
特別要注意elk所有軟體的連接埠監聽,切勿暴露監聽到公網上去,另外即便是內網你也得注意配置內網的訪問限制