作者:小傅哥,博客:https://bugstack.cn
本文的宗旨在于通過(guò)易于上手實(shí)操的方式,教會(huì)讀者完成系統(tǒng)ELK日志采集的對(duì)接和使用。那你知道對(duì)于一個(gè)系統(tǒng)的上線考察,必備的幾樣?xùn)|西是什么嗎?其實(shí)這也是面試中考察求職者,是否真的做過(guò)系統(tǒng)開(kāi)發(fā)和上線的必備問(wèn)題。包括:服務(wù)治理(熔斷/限流)、監(jiān)控和日志,如果你做的系統(tǒng)里沒(méi)有這樣幾個(gè)東西,一種是說(shuō)明系統(tǒng)是玩具項(xiàng)目,另外一種就是壓根沒(méi)做過(guò)或者沒(méi)關(guān)心過(guò)。前面的已經(jīng)寫(xiě)完了,所以今天來(lái)給大家寫(xiě)ELK日志。
本文涉及的工程:
- xfg-dev-tech-elk:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-elk官網(wǎng):https://www.elastic.co/cn/
一、簡(jiǎn)要說(shuō)明
Elastic Stack 技術(shù)棧,別是 Elasticsearch
、Logstash
、Kibana
組成,簡(jiǎn)稱 ELK 是一套針對(duì)日志數(shù)據(jù)做解決方案的框架。它使您能夠聚合來(lái)自所有系統(tǒng)和應(yīng)用程序的日志,分析這些日志,并創(chuàng)建可視化來(lái)進(jìn)行應(yīng)用程序和基礎(chǔ)設(shè)施監(jiān)控、更快的故障排除、安全分析等。
- E = Elasticsearch:Elasticsearch 是在 Apache Lucene 上構(gòu)建的分布式搜索和分析引擎。對(duì)各種語(yǔ)言、高性能和無(wú)架構(gòu) JSON 文檔的支持使 Elasticsearch 成為各種日志分析和搜索使用案例的理想選擇。L = Logstash:Logstash 是一個(gè)開(kāi)源數(shù)據(jù)攝取工具,允許您從各種來(lái)源收集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),并將數(shù)據(jù)發(fā)送到您希望的目標(biāo)。通過(guò)預(yù)構(gòu)建的篩選器和對(duì) 200 多種插件的支持,Logstash 使用戶能夠輕松攝取數(shù)據(jù),無(wú)論數(shù)據(jù)源或類型如何。K = Kibana:Kibana 是一種數(shù)據(jù)可視化和挖掘工具,可以用于日志和時(shí)間序列分析、應(yīng)用程序監(jiān)控和運(yùn)營(yíng)智能使用案例。它提供了強(qiáng)大且易用的功能,例如直方圖、線形圖、餅圖、熱圖和內(nèi)置的地理空間支持。此外,付費(fèi)的 Kibana 還有 x-pack-jdbc 可以使用,讓你就像使用 MyBatis 操作 MySQL 數(shù)據(jù)庫(kù)一樣操作 Elasticsearch 數(shù)據(jù)。
綜上,3個(gè)組件的組合使用。由 Logstash 將攝取、轉(zhuǎn)換數(shù)據(jù)并將其發(fā)送到 Elasticsearch 為攝取的數(shù)據(jù)編制索引,并且分析和搜索這些數(shù)據(jù)。最終 Kibana 會(huì)將分析結(jié)果可視化。也就是你可以在 Kibana 上實(shí)時(shí)看到系統(tǒng)的運(yùn)行日志。
二、環(huán)境配置
這里小傅哥做了個(gè)工程案例,并配有對(duì)應(yīng)的環(huán)境安裝、日志上報(bào),你只需要跟隨接下來(lái)的文章說(shuō)明,即可知道 ELK 如何配置和使用。
- 環(huán)境;jdk 1.8、Maven 3.6.x、Docker組件;ELK version 7.17.14 支持 ARM&ARM代碼;在 xfg-dev-tech-elk 測(cè)試工程中提供了測(cè)試代碼和環(huán)境安裝,綠色按鈕點(diǎn)擊即可安裝【確保你已經(jīng)本地安裝了 Docker】
1. 環(huán)境配置
- docker-compose.yml 運(yùn)行時(shí)會(huì)加載下面的 kibana、logstash 配置信息。kibana.yml 設(shè)置了資源的基本信息,包括 ES 的連接,中文漢化。logstash.conf 設(shè)置了日志的格式,上報(bào)到 es:9200 的地址信息。這些都可以保持默認(rèn)不用修改。
2. 安裝環(huán)境
version:?'3'
#?執(zhí)行腳本;docker-compose -f docker-compose.yml up -d
#?控制臺(tái);GET _cat/indices -?查看 springboot-logstash-?是否存在,上報(bào)后存在,則表示接入成功
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é)點(diǎn)模式啟動(dòng)
??????-?"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這個(gè)域名訪問(wèn)elasticsearch服務(wù)
????networks:
??????-?elk
????depends_on:
??????-?elasticsearch?#?依賴elasticsearch啟動(dòng)后在啟動(dòng)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這個(gè)域名訪問(wèn)elasticsearch服務(wù)
????environment:
??????-?ELASTICSEARCH_URL=http://elasticsearch:9200?#設(shè)置訪問(wèn)elasticsearch的地址
??????-?'elasticsearch.hosts=http://es:9200'?#設(shè)置訪問(wèn)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)入日志和控制臺(tái)。如果啟動(dòng)失敗,可以檢查日志。
3. 日志配置
3.1 引入POM - logstash
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.3</version>
</dependency>
這個(gè)Jar是為了上報(bào)應(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">
????<!--可以訪問(wèn)的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 通過(guò)占位符可以使用 yml 配置,這樣方便后期動(dòng)態(tài)調(diào)整。
四、應(yīng)用測(cè)試
1. 啟動(dòng)應(yīng)用&檢測(cè)上報(bào)
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
- - 通過(guò)命令檢測(cè)日志上報(bào)
2. 配置日志
地址:http://0.0.0.0:5601/app/discover
2.1 創(chuàng)建索引
- 當(dāng)你的應(yīng)用啟動(dòng)后,會(huì)上報(bào)數(shù)據(jù)。這個(gè)時(shí)候在點(diǎn)擊 Discover 會(huì)提示你有可用的數(shù)據(jù)。如圖創(chuàng)建索引即可。
2.2 回到監(jiān)控
創(chuàng)建索引后,回到 Discover 即可查看監(jiān)控日志。在這個(gè)階段,你可以訪問(wèn)應(yīng)用程序接口,查看上報(bào)日志信息;http://localhost:8091/api/ratelimiter/login?fingerprint=uljpplllll01009&uId=1000&token=8790
- 當(dāng)你不段的訪問(wèn)接口,就可以看到上報(bào)的日志數(shù)據(jù)信息了。
小傅哥【星球:碼農(nóng)會(huì)鎖】包括了所有這樣的實(shí)戰(zhàn)鍛煉;OpenAI大模型應(yīng)用(含支付)、Api網(wǎng)關(guān)、Lottery 抽獎(jiǎng)、IM通信、SpringBoot Starter、IDEA Plugin 等。學(xué)習(xí)實(shí)戰(zhàn)項(xiàng)目,面試時(shí)簡(jiǎn)歷才有東西可寫(xiě)!