linux中搭建Elasticsearch-2.x Logstash-2.x Kibana-4.5.x Kafka為訊息中心的ELK日誌平台

來源:互聯網
上載者:User


介紹

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所有軟體的連接埠監聽,切勿暴露監聽到公網上去,另外即便是內網你也得注意配置內網的訪問限制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.