ELK搭建
需要準備一臺linux服務器(最好是CentOS7),內存至少4G以上(三個組件都比較占用內存)
演示基于ElasticSearch采用的是8.5.0版本
1、 Docker安裝Elasticsearch
創建一個網絡
因為我們還需要部署kibana容器、logstash容器,需要讓這些容器互聯。
docker network create elk
下載鏡像
docker pull elasticsearch:8.5.0
在宿主機建立文件夾
mkdir -p /opt/elk/elasticsearch/{config,plugins,data}
制作配置文件
cat <<EOF> /opt/elk/elasticsearch/config/elasticsearch.yml
xpack.security.enabled: false
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: false # 不配報錯
xpack.security.enrollment.enabled: true
http.host: 0.0.0.0
EOF
修改權限
chmod -R 777 /opt/elk/elasticsearch
創建容器
docker run -d \--name es850 \-e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" \-e "discovery.type=single-node" \-v /opt/elk/elasticsearch/data:/usr/share/elasticsearch/data \-v /opt/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-v /opt/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \--privileged \--network elk \-p 9200:9200 \-p 9300:9300 \
elasticsearch:8.5.0
最終效果
在瀏覽器中輸入:http://39.106.67.195:9200/ (按照自己的ip訪問)即可看到elasticsearch的響應結果:
2 、Docker安裝Logstash
拉取鏡像
docker pull logstash:8.5.0
創建文件
mkdir -p /opt/elk/logstash/{pipeline,config}
進入logstash文件
cd /opt/elk/logstash/pipeline
vim logstash.conf
input {tcp {mode => "server"host => "0.0.0.0"port => 5044codec => json_lines}
}
filter{}
output {elasticsearch {hosts => "es850:9200"index => "tingshu-%{+YYYY.MM.dd}"}
}
進入config文件
cd /opt/elk/logstash/config
vim logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://es850:9200" ] #設置跟es的服務地址
創建容器
docker run -d \
-p 5044:5044 \
-p 9600:9600 \
--name logstash850 \
--network=elk \
-v /opt/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-v /opt/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
logstash:8.5.0
3、Docker安裝Kibana
拉取鏡像
docker pull kibana:8.5.0
創建目錄
mkdir -p /opt/elk/kibana/{config,data}
進入config文件
cd /opt/elk/kibana/config
vim kibana.yml
server.host: "0.0.0.0" # 不配報錯
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://es850:9200" ]
i18n.locale: "zh-CN"
創建容器
docker run -d \
--name kibana850 \
--network=elk \
-v /opt/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-p 5601:5601 \
kibana:8.5.0
--network elk
:加入一個名為es-net的網絡中,與elasticsearch在同一個網絡中-e ELASTICSEARCH_HOSTS=http://es:9200"
:設置elasticsearch的地址,因為kibana已經與elasticsearch在一個網絡,因此可以用容器名直接訪問elasticsearch-p 5601:5601
:端口映射配置
此時,在瀏覽器輸入地址訪問:http://8.140.252.86:5601,即可看到結果
4、 SpringBoot項目對接Logstash
在項目的pom文件中添加新的依賴
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.6</version>
</dependency>
目前,我們采用的logback來采集日志進行上報給logstash,logstash對接es,把數據存入到es中,最終通過kibana展示。
在application.yml文件中設置logback配置的目錄
logging:config: classpath:logback-spring.xml
在resources目錄中新增一個文件logback-spring.xml(注意命名,不要修改)
<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><springProperty scope="context" name="springAppName" source="spring.application.name"/><springProperty scope="context" name="serverPort" source="server.port"/><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--logstash的服務地址和端口,可以實際情況設置--><destination>8.140.252.86:5044</destination><!-- 日志輸出編碼 --><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><providers><timestamp><timeZone>UTC</timeZone></timestamp><pattern><pattern>{<!--應用名稱 -->"app": "${springAppName}_${serverPort}",<!--打印時間 -->"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",<!--線程名稱 -->"thread": "%thread",<!--日志級別 -->"level": "%level",<!--日志名稱 -->"logger_name": "%logger",<!--日志信息 -->"message": "%msg",<!--日志堆棧 -->"stack_trace": "%exception"}</pattern></pattern></providers></encoder></appender><!--定義日志文件的存儲地址,使用絕對路徑--><property name="LOG_HOME" value="/home/logs"/><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名--><fileNamePattern>${LOG_HOME}/${springAppName}-${serverPort}-%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="LOGSTASH" /><appender-ref ref="FILE" /><appender-ref ref="CONSOLE" /></root>
</configuration>
5、 ELK基本使用
5.1 查看索引文件
對接項目之后,可以啟動項目,產生一些日志數據
然后打開kibana,找到索引管理
可以直接查看已創建的日志索引
5.2 添加索引模式
如果想用kibana方便的查看日志的數據,可以添加索引模式,如下圖
點擊創建索引模式,輸入想要管理的索引名稱,保存
5.3 檢索日志
打開Discover
檢索日志,選擇不同的索引,可以按照不同的字段檢索,或者在輸入框直接輸入內容,也是可以的
工作定位線上問題:
6、 設置用戶名密碼
一、先操作ES容器
修改配置文件
vim /opt/elk/elasticsearch/config/elasticsearch.yml
重啟容器
docker restart 123
進入容器
docker exec -it 123 /bin/bash
執行創建密碼的命令
為所有用戶輸入密碼(可以為同一個),完事后回到宿主機 ,重啟容器
elasticsearch
./bin/elasticsearch-setup-passwords interactive
重新啟動es鏡像
docker restart 123
二、再操作Kibana
修改宿主機配置文件
vim /opt/elk/kibana/config/kibana.yml
追加下面內容
elasticsearch.username: "kibana_system"
elasticsearch.password: "111111"
重啟kibana
docker restart 34c
三、再操作logstash
修改宿主機配置文件
vim /opt/elk/logstash/pipeline/logstash.conf
追加下面內容
user => "elastic"
password => "111111"
vim /opt/elk/logstash/config/logstash.yml
追加下面內容
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "111111"
重啟logstash
docker restart 993