ELK 日志分析系统
本篇介绍开源分布式日志系统 ELK(Elasticsearch + Logstash + Kibana)及 EFK(Elasticsearch + Filebeat + Kibana)的搭建与使用,涵盖 Elasticsearch 集群配置、Kibana 安装、Logstash 收集系统日志、Filebeat 轻量采集,以及 Kibana 索引配置和常用索引操作。实验使用三台虚拟机模拟。
一、ELK 概述
常见的开源分布式日志系统:
- ELK:Elasticsearch + Logstash + Kibana
- EFK:Elasticsearch + Filebeat + Kibana
各组件作用:
| 组件 | 作用 |
|---|---|
| Elasticsearch | 开源分布式搜索引擎,提供搜集、分析、存储数据三大功能,www.elastic.co |
| Logstash | 日志的搜集、分析、过滤工具 |
| Kibana | 为 Logstash 和 Elasticsearch 提供友好的 Web 界面,用于汇总、分析和搜索日志 |
| Beats | 新版本加入的轻量级日志收集处理工具(Agent),占用资源少 |
架构示意
kibana(日志 Web 展示)
|
|
elasticsearch1 elasticsearch2 elasticsearch3(集群,日志分析存储)
|
|
logstash(收集或过滤日志)
|
------------------------------------------------
| | | |
业务服务器1 业务服务器2 业务服务器3 业务服务器4
beats beats beats beats
Filebeat 收集日志后可传给 Elasticsearch,也可传给 Logstash 过滤。
二、实验环境准备
使用三台虚拟机模拟:
| IP | 角色 |
|---|---|
| 192.168.224.10 | kibana + elasticsearch 主节点 |
| 192.168.224.11 | elasticsearch 数据节点 1 + logstash 或 filebeats |
| 192.168.224.12 | elasticsearch 数据节点 2 + logstash 或 filebeats |
环境要求:内存 2G 以上,CPU 单核以上。
2.1 主机名及绑定
vim /etc/hosts
192.168.224.10 server.example.com server
192.168.224.11 client1.example.com client1
192.168.224.12 client2.example.com client2
2.2 其他准备
- 时间同步。
- 静态 IP 绑定。
- 关闭防火墙、SELinux。
- 配置 YUM 源(本地源加下面的 ELK 源)。
公网源路径(RPM 包较大,网速不建议):
[elk]
name=elk
baseurl=https://artifacts.elastic.co/packages/6.x/yum
enabled=1
gpgcheck=0
内部共享源:
[elk]
name=elk
baseurl=http://192.168.2.254/elk-yum/
enabled=1
gpgcheck=0
三、搭建 Elasticsearch 集群
3.1 安装 JDK 和 Elasticsearch
三台机器确认有 JDK:
java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
三台均安装 Elasticsearch:
yum install elasticsearch -y
3.2 配置 Elasticsearch
主节点(vm1 / 192.168.224.10)
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-cluster # 集群名
node.name: server.com # 本节点主机名
node.master: true # 定义此节点为 master 节点
node.data: false # 定义此节点不为数据节点
path.data: /var/lib/elasticsearch # 数据目录
path.logs: /var/log/elasticsearch # 日志目录
network.host: 0.0.0.0 # 监听地址
http.port: 9200 # 监听端口
discovery.zen.ping.unicast.hosts: ["192.168.224.10", "192.168.224.11", "192.168.224.12"]
数据节点 1(vm2 / 192.168.224.11)
cluster.name: elk-cluster
node.name: client1.example.com
node.master: false # 非 master 节点
node.data: true # 数据节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.224.10", "192.168.224.11", "192.168.224.12"]
数据节点 2(vm3 / 192.168.224.12)
cluster.name: elk-cluster
node.name: client2.example.com
node.master: false
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.224.10", "192.168.224.11", "192.168.224.12"]
三台均启动并设置开机自启:
systemctl start elasticsearch
systemctl enable elasticsearch
3.3 查看端口
netstat -ntlup | grep java
tcp6 0 0 :::9200 :::* LISTEN 49295/java
tcp6 0 0 :::9300 :::* LISTEN 49295/java
9200:数据传输端口。9300:集群通信端口。
3.4 启动失败排查
若启动不了,检查系统最大打开文件数:
ulimit -n
1024
若过小,编辑 /etc/security/limits.conf,在文件尾部添加:
* soft nofile 10240
* hard nofile 10240
重启系统生效。
3.5 检查集群健康状态
通过浏览器或 curl 访问主节点:
curl http://192.168.224.10:9200/_cluster/health?pretty
{
"cluster_name" : "elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
关键字段:
| 字段 | 说明 |
|---|---|
| status | 集群状态,green 为正常 |
| number_of_nodes | 节点总数 |
| number_of_data_nodes | 数据节点数 |
查看集群详细信息:
curl http://192.168.224.10:9200/_cluster/state?pretty
四、安装配置 Kibana
在主节点(192.168.224.10)上安装:
yum install kibana
编辑 /etc/kibana/kibana.yml:
server.port: 5601 # kibana 监听端口
server.host: 192.168.224.10 # 监听 IP
elasticsearch.url: "http://192.168.224.10:9200" # elasticsearch master 地址
logging.dest: /var/log/kibana.log # 日志文件路径,方便排错
准备日志文件并启动:
touch /var/log/kibana.log
chown kibana.kibana /var/log/kibana.log
systemctl restart kibana
systemctl enable kibana
lsof -i:5601
浏览器访问:
http://192.168.224.10:5601
五、ELK:Logstash 收集系统日志
5.1 安装 Logstash
在 node1(192.168.224.11)上安装:
yum install logstash -y
5.2 配置 Rsyslog 转发
编辑 /etc/rsyslog.conf,在文件末尾添加:
*.* @@192.168.224.11:10514
重启 rsyslog:
systemctl restart rsyslog
5.3 配置 Logstash
查看配置:
grep -Ev "^#|^$" /etc/logstash/logstash.yml
path.data: /var/lib/logstash
http.host: "192.168.224.11"
path.logs: /var/log/logstash
创建收集配置文件 /etc/logstash/conf.d/syslog.conf:
input {
syslog {
type => "system-syslog"
port => 10514 # 与 rsyslog 配置的端口对应
}
}
output {
elasticsearch {
hosts => ["192.168.224.10:9200"] # elasticsearch 集群 master 节点
index => "system-syslog-%{+YYYY.MM}" # 定义日志索引
}
}
5.4 启动 Logstash
cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf &
启动等待较久(虚拟机环境约 2-3 分钟),期间屏幕会陆续输出。
netstat -ntlup | grep 9600
netstat -ntlup | grep 10514
5.5 测试并配置 Kibana 索引
在 Kibana 服务器(192.168.224.10)查看索引:
curl '192.168.224.10:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open system-syslog-2018.11 tTNC6tV_RoqYSHLtlCAG-A 5 1 3 0 58.8kb 29.4kb
浏览器访问 http://192.168.224.10:5601:
- Management → Index Patterns。
- 在 Index pattern 填写索引名称(
system-syslog-2018.11或system-syslog-*)→ Next step。 - Time Filter field name 下拉选择
@timestamp→ Create Index Patterns。 - 点击 Discover 查看。
六、EFK:Filebeat 轻量采集
6.1 安装 Filebeat
在 node1 和 node2 上都安装:
yum install filebeat -y
6.2 修改配置
两台机器都编辑 /etc/filebeat/filebeat.yml:
filebeat.inputs:
- type: log
# enabled: false # 注释这一句
paths:
- /var/log/yum.log # 改成要测试的日志,也可写成 /var/log/*.log
output.elasticsearch:
hosts: ["192.168.224.10:9200"] # 输出给 elasticsearch master
6.3 启动服务
两台均执行:
systemctl start filebeat
systemctl enable filebeat
systemctl status filebeat
6.4 确认索引
回到 Kibana 服务器:
curl '192.168.224.10:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana nab-SyHRQSG-XG4zxOG2OA 1 1 2 0 46.8kb 23.4kb
green open filebeat-6.3.0-2018.11.25 FUDik0pdTNOeatjA6iH-Aw 3 1 30 0 228.4kb 107.9kb
6.5 Kibana 图形界面配置
浏览器访问 http://192.168.224.10:5601(原文中写为 5061,应为 5601):
- Management → Index Patterns。
- Index pattern 填写
filebeat-6.3.0-2018.07.05或filebeat-*。 - Next step → Time Filter field name 选择
@timestamp→ Create Index Patterns。 - 点击 Discover 查看。若没有日志输出,可向 yum.log 中追加新日志。
6.6 多日志文件配置示例
grep -Ev "#|^$" /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/yum.log
- type: log
paths:
- /var/log/nginx/access.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.elasticsearch:
hosts: ["192.168.224.10:9200"]
index: "yum-nginx-%{+yyyy.MM.dd}"
setup.template.name: "yum-nginx"
setup.template.pattern: "yum-nginx-*"
七、索引常用操作
删除索引:
curl -XDELETE '192.168.224.10:9200/.kibana'
GET 索引:
curl -XGET '192.168.224.10:9200/yum-nginx-2018.07.06'
更多功能请自行查阅资料。
此处评论已关闭