日志ELK、ELFK、EFK
一.ELK架构
Elasticsearch + Logstash + Kibana
数据库+日志处理+日志显示
1.logstash的使用
(1)input:输入
(2)filter:处理
(3)output:输出
2.ELFK架构
Filebeat-->Elasticsearch-->Logstash-->Kibana
Filebeat 部署在节点上轻量采集日志,Logstash 集中处理。
ELK 的弊端:
NFS数据共享会成为流量瓶颈,不适合大规模集群
是否可以在每台 Web 服务器上安装 Logstash
Logstash占用资源多,在节点部署会争抢应用的资源
ELFK 优势:
Filebeat占用资源非常小,可以在所有节点部署
在每台Web服务器上安装客户端,通过网络发送日志,没有单点故障,没有流量瓶颈
filebeat的配置文件
test可以设置为业务名
filebeat直接区分不同服务的日志
示例filebeat:
filebeat.inputs:- type: filestreamid: oss-logspaths:- /var/oss/*.logfields:log_source: "oss"fields_under_root: true- type: filestreamid: dps-logspaths:- /var/dps/*.logfields:log_source: "dps"fields_under_root: trueoutput.logstash: # 输出到 Logstashhosts: ["your-logstash-host:5044"] # 替换为 Logstash 地址
示例logstash:
# 例如在 /etc/logstash/conf.d/ 下创建 log_processing.conf
input {beats {port => 5044}
}filter {# 此处可添加任意过滤解析规则,如Grok解析消息体:cite[10]# 所有日志都会经过这里
}output {# 根据 log_source 字段值判断输出到哪个索引if [log_source] == "oss" {elasticsearch {hosts => ["http://your-es-host:9200"] #Elasticsearchindex => "oss-logs-%{+YYYY.MM.dd}" # 定义OSS索引格式}} else if [log_source] == "dps" {elasticsearch {hosts => ["http://your-es-host:9200"]index => "dps-logs-%{+YYYY.MM.dd}" # 定义DPS索引格式}}# 可选: stdout { codec => rubydebug } # 调试时可在终端输出结果
}
kibana查看索引日志
(1)查看filebeat采集过来的日志
可以查看到索引日志说明成功采集过来了
(2)创建数据视图,查看日志
(3)选择创建了哪些数据视图(不同业务日志)
(4)日志检索
3.EFK架构
Fluentd 或 Fluent-bit 替代 Logstash,资源占用极低(<10MB),支持插件扩展。
Fluent-bit 更适合容器环境,如 Kubernetes 中的 DaemonSet 部署
ELFK 的弊端:
ELFK 组件较多,需要配置 Logstash 处理数据
Logstash 体积大,占用资源多,不适用放在容器内运行
EFK 优势:
Fluent 整合了 Filebeat 和 Logstash 的功能
Fluent 组件更少,占用资源更小,非常适合容器部署
容器部署的优选方案