大興網(wǎng)站建設(shè)優(yōu)化seo網(wǎng)站seo在線診斷分析
去年公司由于不斷發(fā)展,內(nèi)部自研系統(tǒng)越來(lái)越多,所以后來(lái)搭建了一個(gè)日志收集平臺(tái),并將日志收集功能以二方包形式引入自研系統(tǒng),避免每個(gè)自研系統(tǒng)都要建立一套自己的日志模塊,節(jié)約了開(kāi)發(fā)時(shí)間,管理起來(lái)也更加容易。
這篇文章主要介紹ELK最新版本的搭建,二方包的介紹可以看小霸王的另外一篇文章。
ELK介紹
Elasticsearch 是一個(gè)分布式、Restful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,能夠解決不斷涌現(xiàn)出的各種用例。作為 Elastic Stack 的核心,Elasticsearch 會(huì)集中存儲(chǔ)您的數(shù)據(jù),讓您飛快完成搜索,并對(duì)數(shù)據(jù)進(jìn)行強(qiáng)大的分析。
Logstash 是免費(fèi)且開(kāi)放的服務(wù)器端數(shù)據(jù)處理管道,能夠從多個(gè)來(lái)源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到數(shù)據(jù)庫(kù)中。
Kibana 是一個(gè)免費(fèi)且開(kāi)放的用戶(hù)界面,能夠讓您對(duì) Elasticsearch 數(shù)據(jù)進(jìn)行可視化,從跟蹤查詢(xún)負(fù)載,到查看應(yīng)用請(qǐng)求的整個(gè)過(guò)程,都能輕松完成。
搭建平臺(tái)版本
平臺(tái) | 版本 |
linux | centos stream 9 |
java | openjdk 17 |
elasticsearch | 8.6.2 |
logstash | 8.6.2 |
kibana | 8.6.2 |
VMware Workstation Pro | 17 |
安裝
首先在linux虛擬機(jī)上安裝docker先卸載舊版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
升級(jí)yum
yum update
設(shè)置倉(cāng)庫(kù)
yum install -y yum-utils device-mapper-persistent-data lvm2
使用阿里云鏡像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝 Docker Engine-Community
sudo yum install docker-ce docker-ce-cli containerd.io
設(shè)置docker開(kāi)機(jī)啟動(dòng)并啟動(dòng)docker
sudo systemctl enable docker
sudo systemctl start docker
至此,docker已安裝完成,可以使用docker -v查看版本,接下來(lái)就要安裝三大金剛了
docker pull elasticsearch:8.6.2
docker pull kibana:8.6.2
docker pull logstash:8.6.2
啟動(dòng)
elasticsearch
接著先掛載elasticsearch的配置文件,方便以后修改首先創(chuàng)建elasticsearch.yml文件
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.seed_hosts: 0.0.0.0
network.bind_host: 0.0.0.0
http.port: 9200# Enable security features
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:enabled: false# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:enabled: false
創(chuàng)建elasticsearch容器
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v /home/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e "discovery.type=single-node" elasticsearch:8.6.2
啟動(dòng)elasticsearch容器
docker start elasticsearch
瀏覽器輸入http://你的虛擬機(jī)ip:9200 顯示如下,說(shuō)明es啟動(dòng)成功

kibana
創(chuàng)建kibana容器,這里使用到漢化 "-e I18N_LOCALE=zh-CN"
docker run -d --name kibana --link elasticsearch:elasticsearch -e "I18N_LOCALE=zh-CN" -p 5601:5601 kibana:8.6.2
啟動(dòng)kibana
docker start kibana
輸入http://你的虛擬機(jī)ip:5601/ 此時(shí)kibana啟動(dòng)成功

logstash
在linux的/home目錄下新建logstash.yml文件,其中index是索引的名稱(chēng),我們使用“xiaobawang-”前綴加時(shí)間來(lái)生成每天的索引。
# 輸入端
input {stdin { } #為logstash增加tcp輸入口,后面springboot接入會(huì)用到tcp {mode => "server"host => "0.0.0.0"port => 5043codec => json_lines}
}#輸出端
output {stdout {codec => rubydebug}elasticsearch {hosts => ["http://你的虛擬機(jī)ip地址:9200"]# 輸出至elasticsearch中的自定義index名稱(chēng)index => "xiaobawang-%{+YYYY.MM.dd}"}
}
然后啟動(dòng)logstash,這里配置文件做了映射,/home/logstash.yml映射到/usr/share/logstash/pipeline/logstash.yml
docker run -d --name logstash -p 5043:5043 -p 5044:5044 --privileged=true -v /home/logstash.yml:/usr/share/logstash/pipeline/logstash.yml logstash:8.6.2
進(jìn)入logstash容器
docker exec -it logstash /bin/bash
安裝json_lines所需的插件
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines
重啟logstash,至此elk已全部安裝完成了。
docker restart logstash
Springboot整合logstash
下面使用logstash來(lái)將日志發(fā)送到elasticsearch,這里以springboot為例。
新建一個(gè)springboot項(xiàng)目,引入如下包:
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.3</version>
</dependency>
在resources文件夾下,創(chuàng)建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><!--獲取springboot的yml配置信息--><springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/><!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--><property name="LOG_HOME" value="/home"/><!--輸出到控制臺(tái)--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><withJansi>false</withJansi><encoder><!--<pattern>%d %p (%file:%line)- %m%n</pattern>--><!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級(jí)別從左顯示5個(gè)字符寬度 %msg:日志消息 %n:是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 日志發(fā)送至logstash --><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!-- logstash的服務(wù)器地址和通信端口 --><destination>你的虛擬機(jī)IP地址:5043</destination><!-- encoder is required --><encoder class="net.logstash.logback.encoder.LogstashEncoder"><!-- 在elasticsearch的index中追加applicationName字段 --><customFields>{"applicationName":"${applicationName}"}</customFields></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名--><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天數(shù)--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 日志輸出級(jí)別 --><root level="INFO"><appender-ref ref="logstash"/><appender-ref ref="console"/></root>
</configuration>
新建一個(gè)controller請(qǐng)求
@RestControllerpublicclassTestController {privatefinalstatic Logger logger= LoggerFactory.getLogger(TestController.class);@RequestMapping("/myTest")publicvoidtest(){logger.info("日志開(kāi)始"+System.currentTimeMillis());logger.info("日志結(jié)束"+System.currentTimeMillis());}
}
訪問(wèn)完請(qǐng)求后,進(jìn)入Stack Management找到索引管理

可以看到springboot的3月4號(hào)日志已經(jīng)生成,下面進(jìn)一步查看日志的內(nèi)容。

點(diǎn)擊左側(cè)菜單,選擇Discover,創(chuàng)建數(shù)據(jù)視圖,因?yàn)樗饕Q(chēng)前綴是xiaobawang-,所以索引模式填寫(xiě)xiaobawang-*
就可以匹配每天生成的日志。


至此,ELK已經(jīng)搭建完成,但kibana的功能遠(yuǎn)遠(yuǎn)不限于此,還可以查看不同維度的數(shù)據(jù)視圖報(bào)表,有興趣的童鞋可以研究研究。覺(jué)得有用的話,一鍵三連~