ELK:传统的ELK系统由Elasticsearch、Logstash、Kibana组成,由于Logstash由java语言开发的,占用资源巨大。Logstash的占用的资源甚至比Web服务本身消耗的资源还大,因此在每台web服务器上安装Logstash不合适。
ELFK: 后来在web服务器上部署filebeat日志采集程序,Logstash单独部署在服务器。filebeat由go语言开发,占用资源非常小。
filebeat 本质是一个agent,可以安装在应用服务器各个节点上,根据配置读取对应位置的日志文件,并通过网络上报道相应服务中。
EFK:Fluent软件由C语言开发,性能非常优秀,占用资源小,相当于替代了Logstash和filebeat的工作。
基本流程图
对于ELFK:Logstash使用beats插件接收filebeat的采集的数据
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {
beats {
port => 5044
}
}
filebeat安装配置
[root@web-0001 ~]# dnf install -y filebeat
[root@web-0001 ~]# vim /etc/filebeat/filebeat.yml
25: id: my-filestream-id # 如果同时配置多个收集器,id不能重复
28: enabled: true # 打开收集模块
# 设置识别标签
49: fields:
50: logtype: apache_log
- /var/log/httpd/access_log # 日志文件路径
135: # 注释掉 Elasticsearch 配置
137: # 注释掉 Elasticsearch 配置
148: output.logstash: # 设置输出模块
150: hosts: ["192.168.1.27:5044"] # 输出给logstash
163: processors:
164: - drop_fields: # 删除冗余数据
165: fields:
166: - log
167: - offset
168: - agent
169: - ecs
170: # - add_host_metadata: 注释掉(收集主机信息)
171: # when.not.contains.tags: forwarded 注释掉(判断是否为容器)
172: # - add_cloud_metadata: ~ 注释掉(收集 cloud 信息)
173: # - add_docker_metadata: ~ 注释掉(收集 docker 信息)
174: # - add_kubernetes_metadata: ~ 注释掉(收集 kubernetes 信息)
systemctl restart httpd filebeat
# 测试验证: 访问页面,观察 logstash 输出的数据变化
调试好之后,其他web服务器操作一样,可以用ansible批量安装和改配置。
配置Logstash服务器
vim /etc/logstash/conf.d/my.conf
input {
beats {
port => 5044
}
}
filter{
if [fields][logtype] == "apache_log" {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
remove_field => ["message"]
}}
}
output{
#stdout{ codec => "rubydebug" }
if [fields][logtype] == "apache_log" {
elasticsearch {
hosts => ["es-0004:9200", "es-0005:9200"]
index => "weblog-%{+YYYY.MM.dd}"
}}
}
成功后改权限,设置为开机自启和后台启动
[root@logstash ~]# chown -R logstash.logstash /var/log/logstash /var/lib/logstash
[root@logstash ~]# systemctl enable --now logstash
安装kibana
[root@kibana ~]# dnf install -y kibana
[root@kibana ~]# vim /etc/kibana/kibana.yml
02: server.port: 5601
07: server.host: "0.0.0.0"
23: server.publicBaseUrl: "http://192.168.1.26:5601"
32: elasticsearch.hosts: ["http://es-0004:9200", "http://es-0005:9200"]
115: i18n.locale: "zh-CN"
[root@kibana ~]# systemctl enable --now kibana
使用 ELB 发布端口 5601,通过 WEB 浏览器访问验证
使用 kibana 完成数据统计分析