Springboot 集成ELK日志收集
·
1 系统参数设置
软件版本
os Centos 8 Stream
elasticsearch 7.14.0
kibana 7.14.0
logstash 7.14.0
jdk openjdk17
系统要求
cpu 4核
内存 不小于4G
修改 /etc/security/limits.conf 文件
vim /etc/security/limits.conf
添加以下4行
soft nofile 65536
hard nofile 131072
soft nproc 65536
hard nproc 65536
修改 /etc/sysctl.conf 文件
vim /etc/sysctl.conf
添加下面1行
vm.max_map_count=655360
执行下面命令使配置生效
sysctl -p
2 安装elasticsearch
2.1 创建elk目录
mkdir /opt/elk
cd /opt/elk
2.2 下载
cd /opt/elk
wget https://mirrors.huaweicloud.com/elasticsearch/7.14.0/elasticsearch-7.14.0-linux-x86_64.tar.gz
2.3 解压并移动到指定目录
tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz -C .
2.4 修改配置文件
cd elasticsearch-7.14.0
vim ./config/elasticsearch.yml
node.name: node-1 # 设置节点名
network.host: 0.0.0.0 # 允许外部 ip 访问
cluster.initial_master_nodes: ["node-1"] # 设置集群初始主节点
2.5 新建用户并赋权
adduser elk
# 设置用户 es 的密码(需要输入两遍密码)
# passwd elk
# 将对应的文件夹权限赋予用户 elk
chown -R elk /opt/elk/elasticsearch-7.14.0
2.6 切换至新建的用户并启动 Elasticsearch
# 切换用户 elk
su elk
# 启动 ElasticSearch (-d 表示在后台启动)
/opt/elk/elasticsearch-7.14.0/bin/elasticsearch -d
# 启动需要java11,本地安装过其他非java11环境,需要修改启动文件 elasticsearch-env
需要注释掉38、39、40、41、42、50行
2.7 验证,防火墙需要开放9200端口
# firewall-cmd --permanent --add-port=9200/tcp
# firewall-cmd --permanent --add-port=9200/udp
# firewall-cmd --reload
访问: http://ip:9200
返回结果:
{
"name": "node-1",
"cluster_name": "elasticsearch",
"cluster_uuid": "O-Ox1pjfRJWH_-gpG8Zetw",
"version": {
"number": "7.14.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
3.安装kibana
3.1 下载
cd /opt/elk
wget https://mirrors.huaweicloud.com/kibana/7.14.0/kibana-7.14.0-linux-x86_64.tar.gz
3.2 解压并移动到指定目录
tar -zxvf kibana-7.14.0-linux-x86_64.tar.gz -C .
3.3 修改配置文件
cd kibana-7.14.0
vim ./config/kibana.yml
# 服务端口
server.port: 5601
# 服务器ip 本机
server.host: "0.0.0.0"
# Elasticsearch 服务地址
elasticsearch.hosts: ["http://localhost:9200"]
# 设置语言为中文
i18n.locale: "zh-CN"
3.4 授权并切换用户
给 elk 用户授予 kibana 目录的权限
# 授权
chown -R elk /opt/elk/kibana-7.14.0
# 切换用户
su elk
3.5 启动 Kibana
注意: 启动 Kibana 之前需要先启动 Elasticsearch
需要先配置防火墙打开5601端口:
# firewall-cmd --permanent --add-port=5601/tcp
# firewall-cmd --permanent --add-port=5601/udp
# firewall-cmd --reload
# 后台启动方式
nohup ./bin/kibana &
3.6 在浏览器中访问 Kibana
访问地址: http://ip:5601/
4 安装logstash
4.1 下载
cd /opt/elk
wget https://mirrors.huaweicloud.com/logstash/7.14.0/logstash-7.14.0.tar.gz
4.2 解压并移动到指定目录
tar -zxvf logstash-7.14.0.tar.gz -C .
4.3 新建配置文件
根据原有的 logstash-sample.conf 配置文件复制出一个新的配置文件并修改
cd logstash-7.14.0
cp config/logstash-sample.conf config/logstash-es.conf
# 修改配置文件logstash-es.conf
vim config/logstash-es.conf
修改成如下内容:
input { # input输入源配置
tcp { # 使用tcp输入源
port => 5044 # 服务器监听端口9061接收日志,默认ip localhost
codec => json_lines # 使用json解析日志 需要安装json解析插件
}
}
output { # output 数据输出配置
elasticsearch { # 使用elasticsearch接收
hosts => ["http://localhost:9200"] # 集群地址 多个用,隔开
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { # 输出到命令窗口
codec => rubydebug
}
}
4.4 安装插件
由于国内无法访问默认的gem source,需要将gem source改为国内的源
# 修改Gemfile
vim Gemfile
首先确保linux上有gem,没有则安装 yum install gem
# gem -v
替换安装源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
# 将source这一行改成如下所示:
source "https://gems.ruby-china.com/"
./bin/logstash-plugin install --no-verify logstash-codec-json_lines
如果报以下错误,请检查是否已经配置了 JDK 环境变量。
could not find java; set JAVA_HOME or ensure java is in PATH
需要先配置防火墙打开5601端口:
# firewall-cmd --permanent --add-port=5044/tcp
# firewall-cmd --permanent --add-port=5044/udp
# firewall-cmd --reload
4.5 启动 Logstash
# 后台启动Logstash
nohup ./bin/logstash -f ./config/logstash-es.conf &
# Successfully started Logstash API endpoint {:port=>9600}
5 Springboot集成Logstash
5.1 引入依赖
<!--集成 logstash 日志-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>
5.2 配置logback.xml
<springProperty scope="context" name="serverName" source="spring.application.name" />
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>10.191.2.144:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 添加自定义属性,server_name为服务名 -->
<customFields>{"server_name": "${serverName}"}</customFields>
</encoder>
</appender>
root系统日志
<!--使用上述订阅logstash数据tcp传输 -->
<appender-ref ref="LOGSTASH" />
6 验证
这里以tianyi-gateway调用tianyi-system为例,说明如何查看服务日志。首先两个服务都正常启动了,如下图展示:

tianyi-system

打开kibana,找到Stack Management,选择Index Management

可以看到已创建的日志索引

点击Index Patterns,创建索引模式,便于在Discover中搜索数据

索引模式创建好之后,在Discover中便可根据索引模式搜索数据,这里已经选择了logstash的索引,根据服务名称server_name搜索日志,如果想搜索tianyi-system的日志,就将tianyi-gateway替换为tianyi-system,高亮表示搜索的信息中包含搜索关键字。

如果想搜索tianyi-system服务中包含某一条信息的日志,比如想搜索包含error关键字的日志,可以这么写搜索条件

更多推荐
所有评论(0)