ELK 官方網(wǎng)站:https://www.elastic.co/products
相關(guān)概念:
Elasticsearch :分布式搜索引擎赎线。具有高可伸縮郭赐、高可靠、易管理等特點(diǎn)毅舆±舳觯可以用于全文檢索、結(jié)構(gòu)化檢索和分析笆怠,并能將這三者結(jié)合起來(lái)铝耻。Elasticsearch 基于 Lucene 開(kāi)發(fā),現(xiàn)在使用最廣的開(kāi)源搜索引擎之一蹬刷,Wikipedia 瓢捉、StackOverflow、Github 等都基于它來(lái)構(gòu)建自己的搜索引擎办成。
Logstash :數(shù)據(jù)收集處理引擎泡态。支持動(dòng)態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行過(guò)濾诈火、分析兽赁、豐富、統(tǒng)一格式等操作冷守,然后存儲(chǔ)以供后續(xù)使用。
Kibana :可視化化平臺(tái)惊科。它能夠搜索拍摇、展示存儲(chǔ)在 Elasticsearch 中索引數(shù)據(jù)。使用它可以很方便的用圖表馆截、表格充活、地圖展示和分析數(shù)據(jù)。
- 項(xiàng)目中l(wèi)og4j2配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration status="WARN" monitorInterval="30"> <Properties> <Property name="LOG_HOME">logs</Property> </Properties> <appenders> <Console name="CONSOLE_OUT" target="SYSTEM_OUT"> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout charset="utf-8" pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%pid] [%thread] %-5level %logger{36}.%M - %msg%n"/> </Console> <Console name="CONSOLE_ERROR" target="SYSTEM_ERR"> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout charset="utf-8" pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%pid] [%thread] %-5level %logger{36}.%M - %msg%n" /> </Console> <Socket name="logStash" host="localhost" port="4567" protocol="TCP"> <PatternLayout charset="utf-8"> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{36}.%M - %msg%n</pattern> </PatternLayout> </Socket> </appenders> <loggers> <root level="INFO"> <appender-ref ref="CONSOLE_OUT"/> <appender-ref ref="CONSOLE_ERROR"/> <appender-ref ref="logStash"/> </root> </loggers> </configuration>
- 搭建ElasticSearch
- 解壓
- 修改配置文件 config/elasticsearch.yml
cluster.name=es_cluster node.name=node0 path.data=/tmp/elasticsearch/data path.logs=/tmp/elasticsearch/logs network.host=localhost network.port=9200
- 運(yùn)行: 點(diǎn)擊elasticsearch.bat
- 瀏覽器打開(kāi)localhost:9200蜡娶,看到有配置相關(guān)的信息就表示安裝成功
- 搭建Logstash
- 解壓
- 添加配置文件 config/test.conf
input { tcp { host => "localhost" port => "4567" # 與springBoot中的log4j的配置端口一致 } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["127.0.0.1:9200"] index => "analysis" } }
- 安裝plugins-inputs-tcp混卵,默認(rèn)識(shí)別log4j,為了識(shí)別log4j2窖张,必須要安裝插件
bin/logstash-plugin list --verbose // 先查看是否安裝過(guò) ./bin/logstash-plugin install logstash-input-tcp // 安裝命令
- 啟動(dòng)SpringBoot應(yīng)用程序
- 運(yùn)行:
./bin/logstash -f ./config/test.conf
- 瀏覽器打開(kāi)
localhost:9200/analysis/_search
Logstash補(bǔ)充:
Input:輸入幕随,輸入數(shù)據(jù)可以是 File 、 Stdin(直接從控制臺(tái)輸入) 宿接、TCP赘淮、Syslog 辕录、Redis 、Collectd 等梢卸。
Filter:過(guò)濾走诞,將日志輸出成我們想要的格式。Logstash 存在豐富的過(guò)濾插件:Grok 正則捕獲蛤高、時(shí)間處理蚣旱、JSON 編解碼、數(shù)據(jù)修改 Mutate 戴陡。
Output:輸出塞绿,輸出目標(biāo)可以是 Stdout (直接從控制臺(tái)輸出)、Elasticsearch 猜欺、Redis 位隶、TCP 、File 等开皿。
- 搭建Kibana
- 解壓
- 修改配置文件 config/kibana.yml
server.port: 5601
server.host: "127.0.0.1"
elasticsearch.hosts: ["http://localhost:9200"]
- 運(yùn)行:
./bin/logstash -f ./config/test.conf
- 瀏覽器打開(kāi)
localhost:5601
- 新建索引 analysis (索引名不能有大寫(xiě)和特殊字符)
- 根據(jù)索引篩選日志內(nèi)容
補(bǔ)充:
當(dāng)遇到 Logstash 接收數(shù)據(jù)的能力超過(guò) Elasticsearch 集群處理能力的時(shí)候涧黄,就可以通過(guò)隊(duì)列就能起到削峰填谷的作用, Elasticsearch 集群就不存在丟失數(shù)據(jù)的問(wèn)題赋荆。使用比較多的兩種消息隊(duì)列為Kafka和Redis笋妥。主要從下面兩個(gè)方面考慮:
- 數(shù)據(jù)丟失:Redis 隊(duì)列多用于實(shí)時(shí)性較高的消息推送,并不保證可靠窄潭。Kafka保證可靠但有點(diǎn)延時(shí)
- 數(shù)據(jù)堆積:Redis 隊(duì)列容量取決于機(jī)器內(nèi)存大小春宣,如果超過(guò)設(shè)置的Max memory,數(shù)據(jù)就會(huì)拋棄嫉你。Kafka 的堆積能力取決于機(jī)器硬盤(pán)大小月帝。
EFK
- Filebeat :輕量級(jí)數(shù)據(jù)收集引擎∮奈郏基于原先 Logstash-fowarder 的源碼改造出來(lái)嚷辅。用 Golang 編寫(xiě),無(wú)需依賴(lài) Java 環(huán)境距误,效率高簸搞,占用內(nèi)存和 CPU 比較少,非常適合作為 Agent 跑在服務(wù)器上准潭。
如果日志的量很大趁俊,Logstash 會(huì)遇到資源占用高的問(wèn)題,為解決這個(gè)問(wèn)題就可以引入了Filebeat刑然。
Filebeat的基本用法寺擂。編寫(xiě)配置文件,從 Nginx access.log 中解析日志數(shù)據(jù):
# filebeat.yml
filebeat.prospectors:
- input_type: log
paths: /var/log/nginx/access.log
json.message_key:
output.elasticsearch:
hosts: ["localhost"]
index: "filebeat-nginx-%{+yyyy.MM.dd}"
通過(guò)應(yīng)用實(shí)踐發(fā)現(xiàn),F(xiàn)ilebeat 所消耗的CPU只有 Logstash 的70%沽讹,但收集速度為 Logstash 的7倍般卑。從我們的應(yīng)用實(shí)踐來(lái)看,F(xiàn)ilebeat 確實(shí)用較低的成本和穩(wěn)定的服務(wù)質(zhì)量蝠检,解決了 Logstash 的資源消耗問(wèn)題叹谁。