在上一篇文章《SpringBoot進階教程(七十三)整合elasticsearch 》,已經詳細介紹了關于elasticsearch的安裝與使用,現在主要來看看關于ELK的定義、安裝及使用,
v簡介
1.什么是ELK?
ELK 是elastic公司提供的一套完整的日志收集以及展示的解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash 和 Kibana,
ElasticSearch:ElasticSearch簡稱ES,它是一個實時的分布式搜索和分析引擎,它可以用于全文搜索,結構化搜索以及分析,它是一個建立在全文搜索引擎Apache Lucene基礎上的搜索引擎,使用Java語言撰寫,關于ES的更多介紹,可以看看《SpringBoot進階教程(七十三)整合elasticsearch 》
Logstash:Logstash是一個具有實時傳輸能力的資料收集引擎,用來進行資料收集(如:讀取文本檔案)、決議,并將資料發送給ES,
Kibana:Kibana為Elasticsearch提供了分析和可視化的Web平臺,它可以在Elasticsearch的索引中查找,互動資料,并生成各種維度表格、圖形,
2.ELK的用途
2.1問題排查:我們常說,運維和開發這一輩子無非就是和問題在戰斗,所以這個說起來很樸實的四個字,其實是沉甸甸的,很多公司其實不缺錢,就要穩定,而要穩定,就要運維和開發能夠快速的定位問題,甚至防微杜漸,把問題殺死在搖籃里,日志分析技術顯然問題排查的基石,基于日志做問題排查,還有一個很帥的技術,叫全鏈路追蹤,比如阿里的eagleeye 或者Google的dapper,也算是日志分析技術里的一種,
2.2監控和預警:日志,監控,預警是相輔相成的,基于日志的監控,預警使得運維有自己的機械戰隊,大大節省人力以及延長運維的壽命,
2.3關聯事件:多個資料源產生的日志進行聯動分析,通過某種分析演算法,就能夠解決生活中各個問題,比如金融里的風險欺詐等,這個可以可以應用到無數領域了,取決于你的想象力,
2.4資料分析:這個對于資料分析師,還有演算法工程師都是有所裨益的,
vdocker安裝elk
1. 拉取鏡像
docker pull elasticsearch:7.5.1
docker pull logstash:7.5.1
docker pull kibana:7.5.1
注意各個版本盡量保持一致,否則可能會報錯,
2. 創建docker-compose.yml
因為elk涉及到多個鏡像,所以使用docker-compose的方式,會比較方便,如果還沒有安裝docker-compose的,可以看看這篇文章,
創建目錄: mkdir /usr/local/docker/elk
創建docker-compose.yml檔案 vi docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:7.5.1
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #設定集群名稱為elasticsearch
- "discovery.type=single-node" #以單一節點模式啟動
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #設定使用jvm記憶體大小
volumes:
- /usr/local/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件檔案掛載
- /usr/local/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data #資料檔案掛載
ports:
- 9200:9200
kibana:
image: kibana:7.5.1
container_name: kibana
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 #設定訪問elasticsearch的地址
ports:
- 5601:5601
logstash:
image: logstash:7.5.1
container_name: logstash
volumes:
- /usr/local/docker/elk/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #掛載logstash的組態檔
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
links:
- elasticsearch:es #可以用es這個域名訪問elasticsearch服務
ports:
- 4560:4560
!wd保存,
3. 創建logstash-springboot.conf
創建 logstash目錄 mkdir /usr/local/docker/elk/logstash
cd logstash 進入logstash 目錄
創建logstash-springboot.conf組態檔 vi logstash-springboot.conf
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "es:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
cd .. 回傳上一級目錄,即回到docker-compose所在的目錄( /usr/local/docker/elk ),
4. 啟動ELK
docker-compose up -d
訪問Kibana(訪問地址:http://ip:5601),會看到例外資訊 Cannot connect to the Elasticsearch cluster currently configured for Kibana. 再通過 docker ps -a 發現elasticsearch實體掛了,
通過 docker logs -f elasticsearch 可以看到,es容器里的/usr/share/elasticsearch/data/nodes檔案夾目錄沒有讀寫權限,實際上是沒有宿主機/usr/local/es/data的讀寫權限,
chmod 777 /usr/local/docker/elk/elasticsearch/data
然后重啟一下 docker-compose restart
請求url http://toutou.com:5601 ,搞定,
注意:如果啟動ELK之后馬上請求url,會提示 Kibana server is not ready yet ,等一會就好了,因為ELK三個應用之間創建連接也需要一點時間,
vspringboot整合elk
1. 添加參考
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.2</version> </dependency>
2. 添加logback.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!--應用名稱--> <property name="APP_NAME" value="myshop-demo-elk"/> <!--日志檔案保存路徑--> <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/> <contextName>${APP_NAME}</contextName> <!--每天記錄日志到檔案appender--> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> </appender> <!--輸出到logstash的appender--> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!--可以訪問的logstash日志收集埠--> <destination>toutou.com:4560</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> <appender-ref ref="LOGSTASH"/> </root> </configuration>
注意:appender節點下的destination需要改成自己的logstash服務地址,比如我的是:toutou.com:4560
如果logback.xml不知道怎么配的話,可以看看這篇文章:SpringBoot入門教程(八)配置logback日志
3. 添加測驗Controller
/** * @author toutou * @date by 2021/2 * @des https://www.cnblogs.com/toutou */ @Slf4j @RestController public class IndexController { @GetMapping("/elk") public Result index() { String message = "logback ELK成功接入了,時間:" + new Date(); log.info(message); return Result.setSuccessResult(message); } }
關于springboot的整合就可以了,然后啟動SpringBoot應用就行,
v配置kibana
請求url http://toutou.com:5601 ,點擊Explore on my own,
1. 創建索引



依次按上圖中的步驟創建索引,
2. 查看收集日志


3. 添加過濾條件,查找符合條件的日志

4. 添加過濾條件
通過日志查詢,我們會發現有很多debug的無效日志,這種日志可能不是太需要,而且會影響我們查詢真正有用的日志,這樣我們就可以在收集日志的時候,修改logstash-springboot.conf配置,通過logstash-springboot.conf來移除debug級別的日志,更新后的配置如下:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
if [level] != "ERROR" {
elasticsearch {
hosts => "es:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
}
vkibana漢化
1. 進入kibana容器
docker exec -it kibana /bin/bash
2. 編輯檔案
vi /opt/kibana/config/kibana.yml
修改該檔案 在檔案最后加上一行配置
i18n.locale: zh-CN
注意:zhe-CN和:號之間必須有個空格,否則kibana無法啟動
重啟,即可看到訪問的 kibana已漢化,

v原始碼地址
https://github.com/toutouge/javademosecond/tree/master/hellolearn
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關于作者:專注于基礎平臺的專案開發,如有問題或建議,請多多賜教!
著作權宣告:本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文鏈接,
特此宣告:所有評論和私信都會在第一時間回復,也歡迎園子的大大們指正錯誤,共同進步,或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下,您的鼓勵是作者堅持原創和持續寫作的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479217.html
標籤:Java
上一篇:牛逼!IDEA 護眼方案來了。。
