13

手把手教你如何搭建 ELK 日志收集系统

 3 years ago
source link: https://geekvic.top/post/5c1c8f0.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ELK 简介

你还在为线上排查日志找不到节点服务器而犯愁吗?今天手把手教大家如何搭建一套日志收集系统,用来代替传统的人工登录服务器查看后台服务日志的方式。

在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的 Bug 的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下。
因此我们需要集中化的管理日志,ELK 则应运而生。ELK=ElasticSeach+Logstash+Kibana,日志收集原理如下所示。

  1. 每台服务器集群节点安装 Logstash 日志收集系统插件

  2. 每台服务器节点将日志输入到 Logstash 中

  3. Logstash 将该日志格式化为 json 格式,根据每天创建不同的索引,输出到 ElasticSearch 中

  4. 浏览器使用安装 Kibana 查询日志信息 

elk-.png

Elastic Search

ElasticSearch 是一个分布式搜索服务,提供的是一组 Restful API,底层基于 Lucene,采用多 shard(分片)的方式保证数据安全,并且提供自动 resharding 的功能。是目前全文搜索引擎的首选,可以快速的存储、搜索和分析海量数据。

  1. 官网下载最新版本,地址是:https://www.elastic.co/cn/downloads/elasticsearch,下载下来的最新版本是:elasticsearch-7.4.2-linux-x86_64.tar.gz;

  2. 解压:# tar zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz

  3. 命令:#cd elasticsearch-7.4.2,配置 config 里的 elasticsearch.yml 文件,配置如下。

1
2
3
4
5
6
7
8
cluster.name: es-application
node.name: es-node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.1.169"]
cluster.initial_master_nodes: ["es-node-1"]
path.data: /var/data/es
path.logs: /var/log/es

(1)can not run elasticsearch as root

解决思路:为了安全不允许使用 root 用户启动,需要新建一个 es 的账户,如下所示。

1
2
3
4
5
6
# adduser es
# passwd es
# chown -R es elasticsearch-7.4.2
# su elasticsearch
启动ES:
# ./bin/elasticsearch

(2)max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解决思路:切换到 root 用户修改# vim /etc/security/limits.conf,在最后面追加下面内容,其中 es 是启动 ES 的用户,不是 root。

1
2
es hard nofile 65536
es soft nofile 65536

(3)max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决思路:切换到 root 用户修改配置 sysctl.conf

1
2
3
4
5
#vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
1
2
后台启动:./elasticsearch -d
停止命令:./elasticsearch -stop

访问 ip:9200,成功显示如下 json 信息

es.png

ES Head

推荐安装 chrome 插件,也可以下载安装包进行安装。

Logstash

Logstash 是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。

安装与配置

  • 解压 logstash-7.4.2,修改 logstash-7.4.2/config 的 logstash.conf 文件;
  • logstash.conf 文件配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
input {
tcp {
mode => "server"
host => "192.168.1.169"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "192.168.1.169:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
1
# ../bin/logstash -f logstash.conf

Spring boot 集成 Logstash

pom 文件里引入 jar 包

1
2
3
4
5
6
<!--logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.2</version>
</dependency>

修改 logback-spring.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!--logstash地址-->
<springProperty scope="context" name="LOGSTASH_ADDRESS" source="logstash.address"/>
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>${LOGSTASH_ADDRESS}</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"app": "java-study",
"level": "%-5level",
"thread": "%thread",
"logger": "%logger{50} %M %L ",
"message": "%msg"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>


<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>

yml 添加配置

1
2
logstash:
address: 192.168.1.169:4560

Kibana

Kibana 是一个基于浏览器页面的 Elasticsearch 前端展示工具,也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

安装与配置

  • 解压 kibana-7.4.2-linux-x86_64.tar.gz,并修改配置文件 kibana.yml
1
# ./kibana --allow-root
  • 配置日期格式
    dateformat.png
  • create index pattern
  • 保存自定义筛选字段,供后续筛选
    kibana.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK