作者:小傅哥,博客:https://bugstack.cn
本文的宗旨在于通過易于上手實操的方式,教會讀者完成系統(tǒng)ELK日志采集的對接和使用。那你知道對于一個系統(tǒng)的上線考察,必備的幾樣?xùn)|西是什么嗎?其實這也是面試中考察求職者,是否真的做過系統(tǒng)開發(fā)和上線的必備問題。包括:服務(wù)治理(熔斷/限流)、監(jiān)控和日志,如果你做的系統(tǒng)里沒有這樣幾個東西,一種是說明系統(tǒng)是玩具項目,另外一種就是壓根沒做過或者沒關(guān)心過。前面的已經(jīng)寫完了,所以今天來給大家寫ELK日志。
本文涉及的工程:
- xfg-dev-tech-elk:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-elk官網(wǎng):https://www.elastic.co/cn/
一、簡要說明
Elastic Stack 技術(shù)棧,別是 Elasticsearch
、Logstash
、Kibana
組成,簡稱 ELK 是一套針對日志數(shù)據(jù)做解決方案的框架。它使您能夠聚合來自所有系統(tǒng)和應(yīng)用程序的日志,分析這些日志,并創(chuàng)建可視化來進(jìn)行應(yīng)用程序和基礎(chǔ)設(shè)施監(jiān)控、更快的故障排除、安全分析等。
- E = Elasticsearch:Elasticsearch 是在 Apache Lucene 上構(gòu)建的分布式搜索和分析引擎。對各種語言、高性能和無架構(gòu) JSON 文檔的支持使 Elasticsearch 成為各種日志分析和搜索使用案例的理想選擇。L = Logstash:Logstash 是一個開源數(shù)據(jù)攝取工具,允許您從各種來源收集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),并將數(shù)據(jù)發(fā)送到您希望的目標(biāo)。通過預(yù)構(gòu)建的篩選器和對 200 多種插件的支持,Logstash 使用戶能夠輕松攝取數(shù)據(jù),無論數(shù)據(jù)源或類型如何。K = Kibana:Kibana 是一種數(shù)據(jù)可視化和挖掘工具,可以用于日志和時間序列分析、應(yīng)用程序監(jiān)控和運(yùn)營智能使用案例。它提供了強(qiáng)大且易用的功能,例如直方圖、線形圖、餅圖、熱圖和內(nèi)置的地理空間支持。此外,付費的 Kibana 還有 x-pack-jdbc 可以使用,讓你就像使用 MyBatis 操作 MySQL 數(shù)據(jù)庫一樣操作 Elasticsearch 數(shù)據(jù)。
綜上,3個組件的組合使用。由 Logstash 將攝取、轉(zhuǎn)換數(shù)據(jù)并將其發(fā)送到 Elasticsearch 為攝取的數(shù)據(jù)編制索引,并且分析和搜索這些數(shù)據(jù)。最終 Kibana 會將分析結(jié)果可視化。也就是你可以在 Kibana 上實時看到系統(tǒng)的運(yùn)行日志。
二、環(huán)境配置
這里小傅哥做了個工程案例,并配有對應(yīng)的環(huán)境安裝、日志上報,你只需要跟隨接下來的文章說明,即可知道 ELK 如何配置和使用。
- 環(huán)境;jdk 1.8、Maven 3.6.x、Docker組件;ELK version 7.17.14 支持 ARM&ARM代碼;在 xfg-dev-tech-elk 測試工程中提供了測試代碼和環(huán)境安裝,綠色按鈕點擊即可安裝【確保你已經(jīng)本地安裝了 Docker】
1. 環(huán)境配置
- docker-compose.yml 運(yùn)行時會加載下面的 kibana、logstash 配置信息。kibana.yml 設(shè)置了資源的基本信息,包括 ES 的連接,中文漢化。logstash.conf 設(shè)置了日志的格式,上報到 es:9200 的地址信息。這些都可以保持默認(rèn)不用修改。
2. 安裝環(huán)境
version:?'3'
#?執(zhí)行腳本;docker-compose -f docker-compose.yml up -d
#?控制臺;GET _cat/indices -?查看 springboot-logstash-?是否存在,上報后存在,則表示接入成功
services:
??elasticsearch:
????image:?elasticsearch:7.17.14
????ports:
??????-?'9200:9200'
??????-?'9300:9300'
????container_name:?elasticsearch
????restart:?always
????environment:
??????-?'cluster.name=elasticsearch'?#?設(shè)置集群名稱為elasticsearch
??????-?'discovery.type=single-node'?#?以單一節(jié)點模式啟動
??????-?"cluster.name=docker-cluster"?#?設(shè)置名稱
??????-?'ES_JAVA_OPTS=-Xms512m?-Xmx512m'?#?設(shè)置使用jvm內(nèi)存大小
????networks:
??????-?elk
??logstash:
????image:?logstash:7.17.14
????container_name:?logstash
????restart:?always
????volumes:
??????-?/etc/localtime:/etc/localtime
??????-?./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
????ports:
??????-?'4560:4560'
??????-?'50000:50000/tcp'
??????-?'50000:50000/udp'
??????-?'9600:9600'
????environment:
??????LS_JAVA_OPTS:?-Xms1024m?-Xmx1024m
??????TZ:?Asia/Shanghai
??????MONITORING_ENABLED:?false
????links:
??????-?elasticsearch:es?#?可以用es這個域名訪問elasticsearch服務(wù)
????networks:
??????-?elk
????depends_on:
??????-?elasticsearch?#?依賴elasticsearch啟動后在啟動logstash
??kibana:
????image:?kibana:7.17.14
????container_name:?kibana
????restart:?always
????volumes:
??????-?/etc/localtime:/etc/localtime
??????-?./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
????ports:
??????-?'5601:5601'
????links:
??????-?elasticsearch:es?#可以用es這個域名訪問elasticsearch服務(wù)
????environment:
??????-?ELASTICSEARCH_URL=http://elasticsearch:9200?#設(shè)置訪問elasticsearch的地址
??????-?'elasticsearch.hosts=http://es:9200'?#設(shè)置訪問elasticsearch的地址
??????-?I18N_LOCALE=zh-CN
????networks:
??????-?elk
????depends_on:
??????-?elasticsearch
networks:
??elk:
????driver:?bridge?#網(wǎng)絡(luò)
- 這是 docker compose 執(zhí)行腳本,如果你本地已經(jīng)安裝了 Docker 可以直接執(zhí)行 安裝即可。安裝完成后,當(dāng)你看到如上截圖,則表示已經(jīng)運(yùn)行。注意 Quick Actions 下可以進(jìn)入日志和控制臺。如果啟動失敗,可以檢查日志。
3. 日志配置
3.1 引入POM - logstash
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.3</version>
</dependency>
這個Jar是為了上報應(yīng)用日志用的。工程的根目錄下引入是定義版本,在 xfg-dev-tech-app 模塊下引入是具體的引入。
3.2 logback 采集
#?logstash部署的服務(wù)器IP
logstash:
??host:?127.0.0.1
<springProperty?name="LOG_STASH_HOST"?scope="context"?source="logstash.host"?defaultValue="127.0.0.1"/>
<!--輸出到logstash的appender-->
<appender?name="LOGSTASH"?class="net.logstash.logback.appender.LogstashTcpSocketAppender">
????<!--可以訪問的logstash日志收集端口-->
????<destination>${LOG_STASH_HOST}:4560</destination>
????<encoder?charset="UTF-8"?class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root?level="info">
????<appender-ref?ref="LOGSTASH"/>
</root>
- LOG_STASH_HOST 通過占位符可以使用 yml 配置,這樣方便后期動態(tài)調(diào)整。
四、應(yīng)用測試
1. 啟動應(yīng)用&檢測上報
public?class?Application?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(Application.class);
????}
????/**
?????*?curl?http://localhost:8091/api/ratelimiter/login?fingerprint=uljpplllll01009&uId=1000&token=8790
?????*/
????@RequestMapping(value?=?"login",?method?=?RequestMethod.GET)
????public?String?login(String?fingerprint,?String?uId,?String?token)?{
????????log.info("模擬登錄?login?fingerprint:{}",?fingerprint);
????????return?"模擬登錄:登錄成功?"?+?uId;
????}
}
-
- 地址:http://0.0.0.0:5601/app/dev_tools#/console命令:
GET _cat/indices
- - 通過命令檢測日志上報
2. 配置日志
地址:http://0.0.0.0:5601/app/discover
2.1 創(chuàng)建索引
- 當(dāng)你的應(yīng)用啟動后,會上報數(shù)據(jù)。這個時候在點擊 Discover 會提示你有可用的數(shù)據(jù)。如圖創(chuàng)建索引即可。
2.2 回到監(jiān)控
創(chuàng)建索引后,回到 Discover 即可查看監(jiān)控日志。在這個階段,你可以訪問應(yīng)用程序接口,查看上報日志信息;http://localhost:8091/api/ratelimiter/login?fingerprint=uljpplllll01009&uId=1000&token=8790
- 當(dāng)你不段的訪問接口,就可以看到上報的日志數(shù)據(jù)信息了。
小傅哥【星球:碼農(nóng)會鎖】包括了所有這樣的實戰(zhàn)鍛煉;OpenAI大模型應(yīng)用(含支付)、Api網(wǎng)關(guān)、Lottery 抽獎、IM通信、SpringBoot Starter、IDEA Plugin 等。學(xué)習(xí)實戰(zhàn)項目,面試時簡歷才有東西可寫!