公司面对日益增长的日志和集群主机,日志观察变得越发困难,部分实习生对Linux不熟练,查日志效率低,决定寻找一个图形化的日志查询工具,经过对比,ELK在部署复杂度,可拓展性等各个方面均超越其他方案,更符合我们公司对日志监控的需求
ELK
首先ELK是由Elasticsearch + LogStash + Kibana组成, 5.0起增加了FileBeat,拥有Beat的体系称为Elastic Stack
大名鼎鼎的Elasticsearch,使用apache顶级项目Lucene
- 全文检索引擎工具包,进一步完善并简化使用,在这个体系中提供了分析,存储的功能。
LogStash是一个日志收集、过滤的框架。Kibana是一个图形化的展示框架。
最后FileBeat是新加入的成员,他的作用跟LogStash基本差不多,但FileBeat更加轻,对系统占用较低,所以现在的架构变成ELK + 一大堆FileBeat的节点,FileBeat把日志输送到LogStash中,由LogStash过滤整理,发送到ElesticSearch中,最终由Kibana做界面展示
搭建
注:博客中所提及的软件版本基于当前最新版本 - 6.5.7
先安装JDK,因为Oracle可能要收费,最好采用OpenJDK,避免日后麻烦
然后引入官方的镜像源:1
2
3
4
5
6
7
8
9
10
11rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/elastic.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
然后就可以安装这四个软件了1
2
3
4yum install -y elasticsearch
yum install -y kibana
yum install -y logstash
yum install -y filebeat
当然是不建议ELK安装在同一台主机上,elasticsearch最好组成分布式,一个主节点,两个数据节点
kibana和logstash可以安装在同一台主机上,而filebeat安装在被监控的主机上
ES配置&启动
1 | vim /etc/elasticsearch/elasticsearch.yml # es配置文件 |
logstash配置&启动
1 | vim /etc/logstash/conf.d/syslog.conf # logstash配置文件 |
kibana配置&启动
1 | vim /etc/kibana/kibana.yml # kibana配置文件 |
启动成功后,浏览器访问http://ip:9201/
,应该可以看到你的kibana洁面
filebeat配置&启动
1 | vim /etc/filebeat/filebeat.yml # filebeat配置文件 |
配置
其实配置这一块我觉得还是挺简单的
首先配置ES1
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
31
32
33
34
35
36
37
38# ---------------------------------- 集群 -----------------------------------
#
# 为集群设置一个描述名称:
cluster.name: master
# ------------------------------------ Node ------------------------------------
#
# 为节点设置一个名称:
node.name: master-node
# 是否为master节点
node.master: true
# Add custom attributes to the node:
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# 存储数据路径 (separate multiple locations by comma):
path.data: /var/lib/elasticsearch
#
# 日志文件路径:
path.logs: /var/log/elasticsearch
#
# ---------------------------------- Network -----------------------------------
#
# 设置绑定的IP 默认的0.0.0.0即可 (IPv4 or IPv6):
network.host: 0.0.0.0
#
#设置端口号:
http.port: 9200
#
# --------------------------------- Discovery ----------------------------------
# 如果是集群模式在这里配置
#
# discovery.zen.ping.unicast.hosts: ["49.4.15.184"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
# discovery.zen.minimum_master_nodes:
#
配置完成后,就可以启动ES了。
然后配置logstash,这个文件有点说道,他可以开好几个端口监听不同来源的日志,也可以通过一个端口来监听多个来源
重要的是打Tag1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21input { # 定义日志源
beats {
port => 9203
}
syslog {
type => "system-syslog" # 定义类型
port => 9202 # 定义监听端口
}
}
output { # 定义日志输出
if "telecom-64-server-8080" in [tags]{ # 判断日志的标签
elasticsearch {
hosts => ["localhost:9200"] # 定义es服务器的ip
index => "telecom-64-server-8080-%{+YYYY.MM}" # 定义索引
}
}
elasticsearch {
hosts => ["localhost:9200"] # 定义es服务器的ip
index => "system-syslog-%{+YYYY.MM}" # 定义索引
}
}
启动完logstash后,先把kibana启动起来
就四行配置即可1
2
3
4server.port: 9201
server.host: "0.0.0.0"
logging.dest: /var/log/kibana.log
elasticsearch.url: "http://49.4.15.184:9200"
最后到需要被监听的服务的主机上,配置filebeat1
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#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
# 是否启用这个配置
enabled: true
# 配置一个数据源
paths:
- /home/webapp/tomcat-8.0.36_telecom_8080/logs/catalina.out
# 配置这个数据源的标签
tags: ["telecom-64-server-8080"]
#============================= Filebeat modules ===============================
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#==================== Elasticsearch template setting ==========================
setup.template.settings:
index.number_of_shards: 3
#============================== Kibana =====================================
setup.kibana:
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["49.4.15.184:9203"]
#================================ Procesors =====================================
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
总结
这样就配置好了Elastic Stack,下一篇来弄一下警告系统的集成