elk日志系统搭建
一、elk的介绍
ELK平台一般我们用来做日志系统。它是三个开源项目的首字母的总称。ELK主要是以这三个项目作为核心来搭建的日志处理系统。它们这个三个项目分别是Elasticsearch、Logstash 和 Kibana。
- EalsticSearch 搜索和分析的功能
- Logstach 搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统
- Kibana 数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台
ELK日志处理的大概流程,主要是Logstach对日志进行采集然后转到EalsticSearch进行储存然后再经过Kibana进行展示。
二、Elk日志分析的作用
假设我们随着机器的增加,那我们的日志文件是否就分布到了不同的机器上?如果出现了错误那我们就需要一台一台机器的去查看他的日志,非常的麻烦。但是如果日志接入了ELK就不一样了。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。这都依赖ES强大的反向索引功能,这样我们根据关键字就能查询到关键的错误日志了
三、ELK的安装部署
(1)、ElasticSearch的安装和部署
- 先下载 elasticsearch-8.6.2-linux-x86_64.tar.gz包,现在安装的版本是8.6.2官网下载地址https://www.elastic.co/cn/downloads根据自己安装的地址进行下载。我们使用的是linux安装。
-
解压 elasticsearch-8.6.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.6.2-linux-x86_64.tar.gz
-
创建文件夹
mkdir -p /usr/local/software/elk/elasticsearch-8.6.2/data/datacd mkdir -p /usr/local/software/elk/elasticsearch-8.6.2/data/logs
-
修改配置文件 elasticsearch.yml
path.data:/usr/local/software/elk/elasticsearch-8.6.2/data/data # ES数据的存放路径 path.logs: /usr/local/software/elk/elasticsearch-8.6.2/data/logs # ES日志的存放路径 network.host: 10.211.55.3 # 当前节点绑定的IP地址
-
创建es用户和设置密码,由于es默认不可以利用root用户进行启动为了安全
useradd es passwd es
-
修改用户权限
chown -R es:es /usr/local/software/elk/elasticsearch-8.6.2/ chown -R es:es /usr/local/software/elk/elasticsearch-8.6.2/data/logs chown -R es:es /usr/local/software/elk/elasticsearch-8.6.2/data/data
-
修改用户最大可创建文件数 和修改最大虚拟内存大小 ,elasticsearch 要求比较高,liux默认的大小不能够满足,启动elasticsearch会报错
第一:vim /etc/security/limits.conf修改用户最大可创建文件数,在文件的末尾添加: #给es用户添加 es soft nofile 65536 es hard nofile 65536 验证: ulimit -Hn [es@pms-hadoop-data bin]$ ulimit -Hn 65536 第二:vim /etc/sysctl.conf修改最大虚拟内存大小,在文件的末尾添加: vm.max_map_count=262144 验证:sysctl -p查看虚拟内存的大小
-
先将认证关了,不然后期会出现:**Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12 ** 是因为开启了ssl认证。只需要在 elasticsearch.yml修改配置就好了# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents xpack.security.http.ssl: enabled: false #改为false keystore.path: certs/http.p12
访问需要用户名和密码我们可以直接将校验关闭
# Enable security: false
-
启动elasticsearch(进入elasticsearch-8.6.2目录)
bin/elasticsearch #前台启动退出elasticsearch 也会直接退出 ./elasticsearch -d # elasticsearch-8.6.2下的目录后台启动
-
访问看看是否安装成功 http://linuxIp:9200/
(2)、Kibana的安装
-
先下载 kibana-8.6.2-linux-x86_64.tar.gz,和elasticsearch相同的下载地址,在下载页面找到kibana,解压
tar -zxvf kibana-8.6.2-linux-x86_64.tar.gz
-
进入kibana目录找到config里面的kibana.yml文件,添加一下配置
server.host: "10.211.55.3" #绑定的es地址如果是集群请用逗号分隔 elasticsearch.hosts: ["http://10.211.55.3:9200"] #端口 server.port: 5601 #默认是英文,修改成中文 i18n.locale: "zh-CN"
-
启动kibana,找到kibana目录下的bin目录
./kibana #前台启动 nohup bin/kibana & #后台启动
-
访问http://linuxIp:5601/,测试验证是否整合成功elasticsearch,找到首页开发者工具
5.创建索引,获取索引测试可以发现已经连上了elasticsearch
-
测试数据
#创建索引 PUT /test #查询索引 GET /test; #新增向索引中添加数据 PUT /test/_doc/1 { "name":"snail", "sex":0, "age":22 } PUT /test/_doc/2 { "name":"周依琳", "sex":0, "age":22 } PUT /test/_doc/3 { "name":"周结论", "sex":0, "age":22 } PUT /test/_doc/4 { "name":"周蜗牛", "sex":0, "age":22 } PUT /test/_doc/5 { "name":"牛粪粪", "sex":0, "age":22 }
(3)、Logstach的安装
-
解压 logstash-oss-8.6.2-linux-x86_64.tar.gz
tar -zxvf logstash-oss-8.6.2-linux-aarch64.tar.gz
-
在logstash的config目录下创建一个文件logstash.conf
touch logstash.conf
-
配置
input { stdin{} } output { elasticsearch { hosts => ["http://192.168.200.130:9200"] # ElasticSearch 的地址和端口 index => "log-%{+YYYY.MM.dd}" # 指定索引名,可以根据自己的需求指定命名 codec => "json" } stdout { codec => rubydebug } }
-
启动logstash
bin/logstash -f config/logstash.conf
在控制台输入内容,它就会同步到我们的elasticsearch中了 我们建立的索引格式是**"log-%{+YYYY.MM.dd}**
可以查看到刚刚创建的索引。通过索引可以查看到我们刚刚插入的信息
这说明elk已经搭建完成了。我们需要使用他做一个日志系统那我们重新配置一下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
}
}
创建一个springboot项目,引入以下jar包进行测试
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
在resource目录下新建一个文件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>
然后进行测试。可以发先es已经可以接受到打印的日志了。
现在es的基本搭建已经完成了。