ELK日志平台搭建
ELK日志平台搭建
开放的端口
elasticsearch (9200、9300)
logstash (5044、9600)
kibana (5601)
一键安装
docker和docker-compose
docker和docker-compose一键安装
①完成yum源更新和基础工具下载 ②完成docker和docker-compose安装
cd /opt
# 下载init.sh
wget https://smarttax-dev.oss-cn-shanghai.aliyuncs.com/test/temp/hera/%E8%B5%9B%E8%BF%AA/%E9%83%A8%E7%BD%B2%E6%96%87%E6%A1%A3%E8%B5%84%E6%96%99%E5%88%AB%E5%88%A0/init.sh
# 运行,会更新yum源和安装docker和docker-compose
chmod +x init.sh
sh ./init.sh
2 #查看docker版本
docker-compose -v
#查看docker-compose版本,若未找到则执行yum install -y docker-compose
ELK一键安装
待更新...
以下是ELK安装部署的详细步骤
1、前期配置
# 创建部分基础文件夹
mkdir -p /root/docker/elasticsearch/{logs,data,config,plugins}
mkdir -p /root/docker/logstash/{pipeline,config}
mkdir -p /root/docker/kibana/config
elasticsearch
elasticsearch.yml
# 当前目录下所有文件赋予权限(读、写、执行)
chmod -R 777 /root/docker/elasticsearch
#创建用户组
groupadd es
#创建用户
useradd es -g es -p es
#赋权
chown -R es:es /root/docker/elasticsearch
cd /root/docker/elasticsearch/config
vim elasticsearch.yml
# 复制粘贴 【elasticsearch.yml】
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true # 开启es跨域
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: false # 开启安全控制 暂不开启
xpack.security.transport.ssl.enabled: false
中文分词和拼音
中文分词和拼音
- IK 分词器 https://github.com/medcl/elasticsearch-analysis-ik/releases
- 拼音分词器 https://github.com/medcl/elasticsearch-analysis-pinyin/releases
cd /root/docker/elasticsearch/plugins
# 1、上传对应版本的插件
# 2、解压
# 3、删除压缩包
logstash
logstash.yml
cd /root/docker/logstash/config/
vim logstash.yml
# 复制粘贴 【logstash.yml】
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.200.130:9200" ] #设置跟es的服务地址
logstash.conf
cd /root/docker/logstash/pipeline/
vim logstash.conf
# 复制粘贴 【logstash.conf】
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.200.130:9200"] # ElasticSearch 的地址和端口
index => "log-%{+YYYY.MM.dd}" # 指定索引名,可以根据自己的需求指定命名
codec => "json"
}
stdout {
codec => rubydebug
}
}
kibana
cd /root/docker/kibana/config
vim kibana.yml
# 复制粘贴 【kibana.yml】
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://192.168.5.22:9200" ] # 修改为自己的ip
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "" # es账号 # 暂无,不设密码 elastic 开启安全策略后的默认
elasticsearch.password: "" # es密码 # 暂无,不设密码 123456
i18n.locale: zh-CN # 中文
2、执行安装
docker-compose-ELK.yml文件
volumes中 冒号 左边是主机地址,右边是容器地址,可以改成自己的主机地址
运行指令
mkdir -p /opt/compose
vim docker-compose-ELK.yml
# 粘贴上下面的内容后
docker-compose -f docker-compose-ELK.yml up -d
# 静静等待完成即可,别忘记放开端口
docker-compose-ELK.yml文件
# 复制粘贴 【docker-compose-ELK.yml】
version: "3"
services:
elasticsearch:
container_name: es # 容器名称
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1 # 使用的Elasticsearch镜像
environment:
- ES_JAVA_OPTS=-Xms512m -Xmx512m # 设置Java虚拟机选项
- discovery.type=single-node # 单节点模式
- TAKE_FILE_OWNERSHIP=true # 获取文件所有权
- bootstrap.memory_lock=true # 锁定内存
volumes:
- /root/docker/elasticsearch/logs:/usr/share/elasticsearch/logs # Elasticsearch日志卷
- /root/docker/elasticsearch/data:/usr/share/elasticsearch/data # Elasticsearch数据卷
- /root/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # Elasticsearch配置文件卷
- /root/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins # Elasticsearch插件卷
privileged: true # 使用特权模式
networks:
- elk-net # 使用的网络
ports:
- "9200:9200" # 端口映射
- "9300:9300"
ulimits: # 取消内存相关限制 用于开启内存锁定
memlock:
soft: -1
hard: -1
logstash:
container_name: logstash # 容器名称
image: docker.elastic.co/logstash/logstash:7.12.1 # 使用的Logstash镜像
volumes:
- /root/docker/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml # Logstash配置卷
- /root/docker/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf # Logstash管道卷
networks:
- elk-net # 使用的网络
ports:
- "5044:5044" # 端口映射
- "9600:9600"
kibana:
container_name: kibana # 容器名称
image: docker.elastic.co/kibana/kibana:7.12.1 # 使用的Kibana镜像
privileged: true # 使用特权模式
environment:
- ELASTICSEARCH_HOSTS=http://es:9200 # 使用服务名称而不是容器名称
- I18N_LOCALE=zh-CN # 设置国际化区域
volumes:
- /root/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml # Kibana配置卷
networks:
- elk-net # 使用的网络
ports:
- "5601:5601" # 端口映射
networks:
elk-net:
external:
name: elk-net # 外部网络名称
3、应用对接ELK
在项目的pom文件中添加新的依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
目前,我们采用的logback来采集日志进行上报给logstash
需要在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>192.168.200.130: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>
也可以在专门在application.yml文件中设置logback配置的目录
logging:
config: classpath:logback-spring.xml
4、ELK基本使用
4.1 查看索引文件
对接项目之后,可以启动项目,产生一些日志数据
然后打开kibana,找到索引管理
可以直接查看已创建的日志索引
4.2 添加索引模式
如果想用kibana方便的查看日志的数据,可以添加索引模式,如下图
点击创建索引模式,输入想要管理的索引名称
点击下一步,添加筛选的字段,一般都是时间戳字段,最后点击创建索引模式
4.3 检索日志
打开Discover
检索日志,选择不同的索引,可以按照不同的字段检索,或者在输入框直接输入内容,也是可以的
5、安全性配置
es调整
首先在elasticsearch.yml中添加如下两行
# 编辑
vim /root/docker/elasticsearch/config/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
重启es
docker restart elasticsearch
发现访问kibana的5601 就要账号密码了
设置es内置的账号密码
# 进入es容器
docker exec -it elasticsearch /bin/bash
# 其中auto是自动生成 一般我都使用 这个
interactive 是交互式,我觉得这个麻烦 ,就用自动
bin/elasticsearch-setup-passwords auto / interactive
# 执行后会有一堆密码,最好用文档来保存下(执行后会获得内置的账号和密码,我一般就需要elastic用超级用户)
kibana调整
# 编辑
vim /root/docker/kibana/config/kibana.yml
elasticsearch.username: "elastic" # elastic超级用户
elasticsearch.password: "" # 填上生成的密码
重启es和kibana的服务就可以拉
别忘记logstash中也要添加账号密码,不然日志传不过来拉
docker restart elasticsearch
docker restart kibana
logstash调整
# 编辑
vim /root/docker/logstash/pipeline/logstash.conf
# 【logstash.conf】
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.200.130:9200"] # ElasticSearch 的地址和端口
index => "log-%{+YYYY.MM.dd}" # 指定索引名,可以根据自己的需求指定命名
codec => "json"
user => "elastic" # !!!新增用户名
password => "" # !!!新增密码
}
stdout {
codec => rubydebug
}
}
然后重启服务
这样就完成了
docker restart logstash
ELK日志平台搭建
http://101.126.22.188:9090//2023/10/31/1698731962206