文章目录
前言
手上的项目需要搭建一个日志平台收集业务和k8s的日志,看了下大家都用EFK,就自己试着搭建一下。
一、EFK是什么(来自百度AI)?
EFK是一套由Elasticsearch、Filebeat和Kibana组成的开源日志收集与分析系统,用于高效存储、检索和可视化日志数据。
核心组件与功能
Elasticsearch。
分布式搜索和分析引擎,负责日志的存储、索引和实时检索,支持全文与结构化查询。
特点包括高扩展性、近实时数据处理和强大的聚合分析能力。Filebeat。
轻量级日志采集工具,替代传统Logstash,资源占用更低,专用于收集和转发日志至Elasticsearch或Logstash。Kibana。
数据可视化平台,提供交互式图表、仪表盘和搜索界面,便于用户直观分析日志数据。
二、版本选择
手上的项目有多套生产环境,但是主要是centos7.9和ubuntu2204。最终确定使用fluent 4.5.2-1,这是centos7上的最后一个版本,在ubuntu2204上也支持。
同时选择配套的es8.8.0
- ES版本:8.8.0
- kibana版本:8.8.0
- fluent版本:4.5.2-1
- docekr-compose版本:1.29.2
- fluent-plugin-elasticsearch版本:5,.3.0
三、es+kibana部署
3.1 docker-compose安装、docker安装
docker-compose的部署参考链接: https://blog.csdn.net/baidu_35848778/article/details/142636644
3.2 docker安装
centos链接: https://blog.csdn.net/baidu_35848778/article/details/142630050
ubuntu
ubuntu链接: https://blog.csdn.net/baidu_35848778/article/details/126833898
3.3 路径准备
mkdir -p /data/monitor/01-es-data
mkdir -p /data/monitor/02-es-data
mkdir -p /data/monitor/03-es-data
chmod 755 -R /data/monitor/01-es-data
chmod 755 -R /data/monitor/02-es-data
chmod 755 -R /data/monitor/03-es-data
3.4 es.yaml准备
version: "3.7"
services:
es01:
image: docker.1ms.run/elasticsearch:8.8.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- TAKE_FILE_OWNERSHIP=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- /data/monitor/01-es-data:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es-network
es02:
image: docker.1ms.run/elasticsearch:8.8.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- TAKE_FILE_OWNERSHIP=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- /data/monitor/02-es-data:/usr/share/elasticsearch/data
networks:
- es-network
es03:
image: docker.1ms.run/elasticsearch:8.8.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- TAKE_FILE_OWNERSHIP=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- /data/monitor/03-es-data:/usr/share/elasticsearch/data
networks:
- es-network
kibana:
image: docker.1ms.run/kibana:8.8.0
container_name: kibana
environment:
- SERVER_NAME=kibana
- ELASTICSEARCH_HOSTS=http://es01:9200
- XPACK_MONITORING_ENABLED=true
- I18N_LOCALE=zh-CN
ports:
- 5601:5601
networks:
- es-network
depends_on:
- es01
networks:
es-network:
driver: bridge
3.5 运行服务
docker-compose -f ./es.yaml up -d
docker-compose -f ./es.yaml ps
四、fluent的安装
4.1 安装包下载
下载地址:https://www.fluentd.org/download/fluent_package
有时候能打开,有时候打不开 应该还是国内网络的限制,但是下面的wget命令没有问题
# rpm
wget http://packages.treasuredata.com.s3.amazonaws.com/4/redhat/7/x86_64/td-agent-4.5.2-1.el7.x86_64.rpm
# deb
wget https://s3.amazonaws.com/packages.treasuredata.com/4/ubuntu/jammy/pool/contrib/t/td-agent/td-agent_4.5.2-1_amd64.deb
4.2 安装
使用本地安装方式安装即可
# centos
yum localinstall ./td-agent-4.5.2-1.el7.x86_64.rpm
# ubuntu
apt install ./td-agent_4.5.2-1_amd64.deb
修改service用户到root
/usr/lib/systemd/system/td-agent.service
[Service]
User=root
Group=root
启动服务
systemctl enable td-agent
systemctl daemon-reload
systemctl restart td-agent
4.3 增加k8s日志配置为例
我这里只是简单的收集一下,那种比较高级的收集和筛选后续有机会的话再搞
/etc/td-agent/td-agent.conf
# kube
# kube-apiserver
<source>
@type tail
path /var/log/containers/kube-apiserver*.log
pos_file /var/log/td-agent/pos/k8s/kube-apiserver.log.pos
tag kube-apiserver
format json
time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>
# kube-controller
<source>
@type tail
path /var/log/containers/kube-controller*.log
pos_file /var/log/td-agent/pos/k8s/kube-controller.log.pos
tag kube-controller
format json
time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>
# kube-scheduler
<source>
@type tail
path /var/log/containers/kube-scheduler*.log
pos_file /var/log/td-agent/pos/k8s/kube-scheduler.log.pos
tag kube-scheduler
format json
time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>
<match **>
@type elasticsearch
host xxx.xxx.xxx.xx(IP)
port 9200
type_name _doc
logstash_format true
logstash_prefix xxxx-${tag}
其他
查看支持的es版本,版本信息不一致的话,日志推不上去
# 查看支持的es版本
td-agent-gem list elasticsearch
五、登陆kibana查看采集结果,配置index
访问数据视图界面,配置数据视图
http://IP:5601/app/management/kibana/dataViews
discover页面查看日志
总结
简单搭建,后续有需求再搞细节,这里用的是没有证书的,按照自己的场景配置证书就可以了。