elk日志分析管理系统的搭建
日志收集的主要流程
- 1.使用logback或者使用filebeat将生成的日志发送给logstash
- 2.logstash对日志进行采集之后,推送给elasticsearch
- 3.Elasticsearch存储Logstash传送的结构化数据,提供给Kibana
- 4.Kibana提供UI页面进行数据展示和分析形成图表等
使用的软件版本
Elasticsearch 6.3.0
Kibana 6.3.0
Logstash 6.3.0
filebeat 6.3.0
要保证所有用到的软件包版本一致,7以上的版本需要jdk11以上
搭建elk日志系统
非集群式,一台机器上搭建elk,接收其它机器上的日志
安装Elasticsearch
安装可以选择yum安装,也可以选择用npm,这里用压缩包安装
解压
tar -zxvf elasticsearch-6.3.0.tar.gz
修改配置文件
vim elasticsearch-6.3.0/config/elasticsearch.yml
将以下注解的注释去掉
network.host: 0.0.0.0 #设置任意ip的机器都可以访问
http.port: 9200 #设置端口
可以添加以下配置
http.cors.enabled: true #允许跨域
http.cors.allow-origin: "*"
启动elasticsearch
elasticsearch-6.3.0/bin/elasticsearch -d #后台启动
如果发现启动不成功,查看日志
tail -100f elasticsearch-6.3.0/logs/elasticsearch.log
如果出现
java.lang.RuntimeException: can not run elasticsearch as root
表示elasticsearch无法通过root用户启动,那创建一个新的用户来启动
1.新建用户elk
useradd elk
2.给elk赋权
修改文件去掉头部#
vi /etc/sudoers
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
3.然后修改用户,使其属于root组
usermod -g root elk
4切换用户elk
su elk
创建完后重新启动,发现还有错误
解决报错问题
(1) max number of threads [1024] for user [elk] is too low, increase to at least [4096]
切换到root用户,进入limits.d目录下修改配置文件。
su root
vim /etc/security/limits.d/90-nproc.conf
修改如下内容:
soft nproc 1024
修改为
soft nproc 4096
(2) max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改配置sysctl.conf
vim /etc/sysctl.conf
添加下面配置:
vm.max_map_count=262144
并执行命令,使修改生效
sysctl -p
如果出现[3]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
修改elasticsearch.yml 底部增加两行参数
vim /root/elk/elasticsearch-6.3.0/config/elasticsearch.yml
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
再次启动elasticsearch
如果出现started则说明启动成功
访问9200端口测试是否成功启动
运行
curl "http://localhost:9200"
如果出现以下字段,则说明成功
安装Logstash
解压
tar -zxvf logstash-6.3.0.tar.gz
修改配置文件
vim logstash-6.3.0/config/logstash.yml
修改或添加
http.host: "0.0.0.0" #设置任意ip机器可以访问
http.port: 9600 #设置端口
启动logstash
nohup logstash-6.3.0/bin/logstash & #后台运行
如果报错,查看日志
tail logstash-6.3.0/logs/logstash-plain.log
验证是否启动
访问9600 端口
curl "http://localhost:9600"
如果出现以下字段则说明成功
安装Kibana
解压
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
修改配置文件
vim kibana-6.3.0-linux-x86_64/config/kibana.yml
去掉注解或者增加
server.port: 5601 #kibana界面访问端口
server.host: "0.0.0.0" #任意ip的机器可以访问
elasticsearch.url: "http://localhost:9200" #对接的es端口
启动kibana
nohup /root/elk/kibana-6.3.0-linux-x86_64/bin/kibana & #后台启动
访问5601端口,查看初始化的kibana页面
接收项目的日志
现在elk搭建完毕,要从其它机器的本地接收日志
通过filebeat发送日志
filebeat读取日志,输出到logstash,经过logstash解析后,输出到 elasticsearch,最后由kibana展示。这种方式无需修改项目的配置和代码。
在需要发送日志的机器上安装filebeat
解压
tar -zxvf filebeat-6.3.0-linux-x86_64
修改配置文件
vim filebeat-6.3.0-linux-x86_64/filebeat.yml
进行如下配置
# filebeat 输入标识
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
# 定义输入类型,为日志类型
- type: log
# Change to true to enable this input configuration.
# 开启配置
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
# 读取日志文件路径,支持多个路径
paths:
#表示发送data/logs下所有拓展名为log的日志文件
- /data/logs/*.log
# 增加自定义字段
fields:
appname: appliction
#可以定义多个输入标识
- type: log
enabled: true
paths:
- /usr/local/logs/info.log
fields:
log_name: test-dev
# Exclude lines. A list of regular expressions to match. It drops the lines that are
# matching any regular expression from the list.
#exclude_lines: ['^DBG']
配置filebeat将日志发送到logstash
注释 output elasticsearch
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"
#----------------------------- Logstash output ------------------------------
#开启输出到logstash的设置
output.logstash:
# The Logstash hosts
# Logstash 主机地址
hosts: ["localhost:5044"]
# Optional SSL. By default is off. 开启ssl
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
后台启动filebeat
nohup ./filebeat -c filebeat.yml &
接下来要在logstash中配置接收filebeat发送的日志
在logstash根目录的config下新建filebeat-logstash.conf
vim config/filebeat-logstash.conf
进行以下编辑
input{
#用于接收filebeat发送的日志
beats{
port => 5044 #接收日志的端口号,要和filebeat的配置一样
ssl => false #是否开启ssl加密
codec => json #格式设置为json否则下面输出的自定义字段取不到值
}
}
output{
#输出配置,将日志输出到elasticsearch中
elasticsearch{
hosts => ["localhost:9200"] #es的端口号
index => ["%{[fileds][appname]}-%{+YYYY.MM.dd}"] #自定义索引的名称,在filebeeat设置的自定义字段的值加上当前的日期
}
}
停止logstash
ps -ef |grep logstash #查询出pid
kill -9 pid 结束logstash的进程
重新启动logstash
nohup logstash-6.3.0/bin/logstash -f logstash-6.3.0/config/filebeat-logstash.conf & #后台运行
通过logback发送日志
可以直接在springboot项目中通过Logback配置,直接发送日志到logstash中
导入依赖
<dependency>
<groupId>net.logstash.lockback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
在resource下新建logback.xml配置文件
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!--应用名称-->
<property name="APP_NAME" value="mall-admin"/>
<!--日志文件保存路径-->
<property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
<contextName>${APP_NAME}</contextName>
<!--每天记录日志到文件appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>192.168.xxx.xxx:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<!--自定义字段-->
<customFields>{"appname":"myapplication"}</customFields>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
在logstash中配置接收logback发送的日志
在logstash根目录的config下新建lockback-logstash.conf
vim config/lockback-logstash.conf
进行以下编辑
input{
tcp{
port => 4506 #接收日志的端口号
codec => json #格式设置为json否则下面输出的自定义字段取不到值
}
}
output{
#输出配置,将日志输出到elasticsearch中
elasticsearch{
hosts => ["localhost:9200"] #es的端口号
index => ["%{[appname]}-%{+YYYY.MM.dd}"] #自定义索引的名称,appname是在logback配置文件中定义的字段名称
}
}
停止logstash
ps -ef |grep logstash #查询出pid
kill -9 pid 结束logstash的进程
重新启动logstash
nohup logstash-6.3.0/bin/logstash -f logstash-6.3.0/config/lockback-logstash.conf & #后台运行
重启项目之后,logback就会将日志发送到logstash中了
参考博客:https://blog.csdn.net/weixin_38117908/article/details/120157417
https://blog.csdn.net/fei003/article/details/104645406/