EFK-日志管理系统
1. EFK简介
Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。
Beats 是数据采集的得力工具。将 Beats 和您的容器一起置于服务器上,或者将 Beats 作为函数加以部署,然后便可在 Elastisearch 中集中处理数据。如果需要更加强大的处理性能,Beats 还能将数据输送到 Logstash 进行转换和解析。
Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。不仅如此,您还可以使用 Vega 语法来设计独属于您自己的可视化图形。所有这些都利用 Elasticsearch 的完整聚合功能。
Elasticsearch 通常与 Kibana 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化Dashboard,Kibana 允许你通过 web 界面来浏览 Elasticsearch 日志数据。
EFK架构图
ELK和EFK的区别
ELK 是现阶段众多企业单位都在使用的一种日志分析系统,它能够方便的为我们收集你想要的日志并且展示出来
ELK是Elasticsearch、Logstash、Kibana的简称,这三者都是开源软件,通常配合使用。
1. Elasticsearch -->存储数据
是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写,能对大容量的数据进行接近实时的存储、搜索和分析操作。
2. Logstash --> 收集数据
数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。
3. Kibana --> 展示数据
数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。
EFK是ELK日志分析系统的一个变种,加入了filebeat 可以更好的收集到资源日志 来为我们的日志分析做好准备工作。
优缺点
Filebeat 相对 Logstash 的优点:
- 侵入低,无需修改 elasticsearch 和 kibana 的配置;
- 性能高,IO 占用率比 logstash 小太多;
当然 Logstash 相比于 FileBeat 也有一定的优势,比如 Logstash 对于日志的格式化处理能力,FileBeat 只是将日志从日志文件中读取出来,当然如果收集的日志本身是有一定格式的,FileBeat 也可以格式化,但是相对于Logstash 来说,效果差很多。
2. 部署介质
部署模式 |
项目地址 |
镜像地址 |
在线资源下载 |
git clone https://git.xxcn/middleware/efk.git |
docker.elastic.co/elasticsearch/elasticsearch:7.9.1 docker.elastic.co/beats/metricbeat:7.9.1 docker.elastic.co/beats/filebeat:7.9.1 docker.elastic.co/kibana/kibana :7.9.1 |
离线资源下载 |
3. k8s安装
如果离线部署,则不需下载步骤。以上部资源则在部署介质步骤中下载,直接使用即可。
3.1 安装elasticsearch
3.1.1 增加efk的helm源
[root@devops-0001 ~]# helm repo add elastic https://helm.elastic.co
"elastic" has been added to your repositories
[root@devops-0001 ~]#
[root@devops-0001 ~]# helm repo list
NAME URL
azure http://mirror.azure.cn/kubernetes/charts/
ali https://apphub.aliyuncs.com
elastic https://helm.elastic.co
[root@devops-0001 ~]#
3.1.2 安装elasticsearch
[root@devops-0001 ~]# mkdir efk && cd efk
[root@devops-0001 efk]#
[root@devops-0001 efk] helm pull elastic/elasticsearch
用命令tar zxvf elasticsearch-7.9.1.tgz解压下载下来的elasticsearch-7.9.1.tgz,得到一个目录elasticsearch。
[root@devops-0001 efk]# tar zxvf elasticsearch-7.9.1.tgz
编辑 vim elasticsearch/values.yaml,修改如下部分:
因为我们环境一台master,5台worker,replicas修改为3就行。保证节点的高可用即可。
因为不使用持久性存储,所以这里把persistence下面的enabled值有true改为false。
这里用的指定了elasticsearch用的镜像,最好是提前在所有节点上提前下载下来,之后保存退出。
执行安装
[root@devops-0001 efk]# helm install elastic elasticsearch
NAME: elastic
LAST DEPLOYED: Fri Apr 7 17:28:00 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.
$ kubectl get pods --namespace=default -l app=elasticsearch-master -w
2. Test cluster health using Helm test.
$ helm test elastic --cleanup
命令里的elastic是应用的名字可以随意写,elasticsearch是解压出来的文件夹。
这里大概1分钟左右,对应的pod会运行起来:
[root@devops-0001 efk]# kubectl get pods
NAME READY STATUS RESTARTS AGE
elasticsearch-master-0 1/1 Running 0 80s
elasticsearch-master-1 1/1 Running 0 79s
[root@devops-0001 efk]#
3.2.安装filebeat
3.2.1 下载filebeat
[root@devops-0001 efk] helm pull elastic/filebeat
用命令tar zxvf filebeat-7.9.1.tgz解压下载下来的 filebeat-7.9.1.tgz,得到一个目录filebeat。
root@devops-0001 efk]# tar zxcf filebeat-7.9.1.tgz
编辑 vim filebeat/values.yaml,查看如下部分:
hostPathRoot: /var/lib
hostNetworking: false
image: "docker.elastic.co/beats/filebeat"
imageTag: "7.9.1"
imagePullPolicy: "IfNotPresent"
imagePullSecrets: []
建议提前把所需镜像在所有节点上下载下来,其他不需要编辑什么,保存退出。
修改抓取日志路径和elasticsearch地址
filebeatConfig:
filebeat.yml: |
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/log/containers/"
output.elasticsearch:
host: '${NODE_NAME}'
hosts: '${ELASTICSEARCH_HOSTS:elasticsearch-master:9200}'
3.2.2 配置filebeat
[root@devops-0001 efk]# helm install fb filebeat
NAME: fb
LAST DEPLOYED: Fri Apr 7 17:34:56 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all containers come up.
$ kubectl get pods --namespace=default -l app=fb-filebeat -w
命令里的fb是应用的名字可以随意写,filebeat是解压出来的文件夹。
大概20秒就好:
[root@devops-0001 efk]# kubectl get pods
NAME READY STATUS RESTARTS AGE
elasticsearch-master-0 1/1 Running 0 9m33s
elasticsearch-master-1 1/1 Running 0 9m32s
fb-filebeat-lgm76 1/1 Running 0 21s
fb-filebeat-trz5m 1/1 Running 0 21s
[root@devops-0001 efk]#
3.3安装metricbeat
3.3.1 下载metricbeat:
[root@devops-0001 efk] helm pull elastic/metricbeat
用命令tar zxvf metricbeat-7.9.1.tgz解压下载下来的 metricbeat-7.9.1.tgz,得到一个目录metricbeat。
tar zxvf metricbeat-7.9.1.tgz
3.3.2 配置metricbeat
类似前面的方法把所有的镜像提前在所有节点下载下来,
[root@devops-0001 efk]# helm install metric metricbeat
NAME: metric
LAST DEPLOYED: Fri Apr 7 17:43:25 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all containers come up.
$ kubectl get pods --namespace=default -l app=metric-metricbeat -w
命令里的metric是应用的名字可以随意写,metricbeat是解压出来的文件夹。
这里大概40秒钟左右,对应的pod会运行起来:
[root@devops-0001 efk]# kubectl get pods
NAME READY STATUS RESTARTS AGE
...输出...
metric-kube-state-metrics-76c5b9fdbf-4jmnr 1/1 Running 0 46s
metric-metricbeat-bbbxx 1/1 Running 0 46s
metric-metricbeat-metrics-696b596c6f-lwp74 1/1 Running 0 46s
metric-metricbeat-z7x7v 1/1 Running 0 46s
[root@devops-0001 efk]#
3.4.安装kibana
[root@devops-0001 efk]# helm pull elastic/kibana
用命令tar zxvf kibana-7.9.1.tgzz解压下载下来的kibana-7.9.1.tgz,得到一个目录kibana。
类似前面的方法把所有的镜像提前在所有节点下载下来,并把服务类型改为NodePort:
保存退出之后,开始安装:
[root@devops-0001 efk]# helm install kb kibana
NAME: kb
LAST DEPLOYED: Sat Sep 12 18:58:36 2020
NAMESPACE: ns6
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@devops-0001 efk]#
命令里的kb是应用的名字可以随意写,kibana是解压出来的文件夹。
这里大概2分钟左右,对应的pod会运行起来:
[root@devops-0001 efk]# kubectl get pods
NAME READY STATUS RESTARTS AGE
...输出...
kb-kibana-d97c78c6-nqt5p 1/1 Running 0 2m1s
...输出...
[root@devops-0001 efk]#
注意两台worker的配置是:分别8G内存,4核CPU
3.4.1 检查pod和svc是否都正常启动
查看启动pod的svc是否都正常启动。当前kibana对应的NodePort端口为30729
kubectl get svc
kubectl get pods
以上可以看到每个节点都自动部署了filebeat抓取端。
[root@devops-0001 ~]# kubectl get pods -o wide|grep filebeat
3.4.2 配置kibana
http://192.168.3.61:30729/app/home#/
3.4.2.1 配置索引
3.4.2.2 创建索引
Kibana-->Index Patterns
索引创建创建filebeat步骤,添加索引名称即可。*代表配置所有。
管理索引选择 Data-->Index Managerment
3.4.3 查看日志
Kibana-->Discover
可以自定义选择过滤条件,就可查看想看的日志了。
4. docker-compose安装配置
4.1 创建洞见虚拟网络。
docker network create --driver bridge --subnet 172.18.0.0/24 --gateway 172.18.0.1 dongjian
4.2 创建docker-compose项目
mkdir efk/filebeat
4.3 配置filbeat.yml
vim filebaet/filebeat.yml
filebeat.inputs:
- type: log
paths:
- '/var/log/*log'
# 日志目录,这个目录是挂载insightone宿主机的日志目录。
- '/usr/share/filebeat/in-logs/*log'
processors:
- decode_json_fields:
fields: ["message"]
target: ""
overwrite_keys: true
output.elasticsearch:
hosts: ["http://192.168.3.158:9200"] # es地址
indices:
- index: "filebeat-%{+yyyy.MM.dd}"
# - index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
#output.console:
# enabled: true
# codec.json:
# pretty: true
#escape_html: false
logging.json: true
#logging.metrics.enabled: false
## 定义info1应用的input类型、以及存放的具体路径
#filebeat.inputs:
#- type: log
# enabled: true
# paths:
# - /var/logs/*.log
# tags: ["log-app"]
# fields:
# index: log-app
#
##============================= Filebeat modules ===============================
#filebeat.config.modules:
# # Glob pattern for configuration loading
# path: ${path.config}/modules.d/*.yml
# # Set to true to enable config reloading
# reload.enabled: true
#
## ============================== logstash =====================================
##output.logstash:
## hosts: ["192.168.226.135:5044"] #192.168.226.135为logstash安装的服务器ip
## enabled: true
##============================== Kibana =====================================
#setup.kibana:
# host: "192.168.3.158:5601"
#
##============================== elasticsearch =====================================
#output.elasticsearch:
# hosts: ["192.168.3.158:9200"]
# enabled: true
4.4 配置 docker-compose.yml
docker-compose.yml
version: '3.3'
services:
elasticsearch:
image: "harbor.insightone.cn/efk/elasticsearch:7.9.1"
container_name: elasticsearch
hostname: elasticsearch
restart: always
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.type=single-node"
- "cluster.name=cluster-elasticsearch"
- "node.name=elasticsearch"
- "bootstrap.memory_lock=true" # 锁住内存 提高性能
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "9200:9200"
- "9300:9300"
networks:
dongjian:
ipv4_address: 172.18.0.163
aliases:
- es
- elasticsearch
#volumes:
#- elasticsearch_data:/usr/share/elasticsearch/data
kibana:
image: "harbor.insightone.cn/efk/kibana:7.9.1"
container_name: kibana
hostname: kibana
restart: always
depends_on:
- elasticsearch
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]'
ports:
- "5601:5601"
networks:
dongjian:
ipv4_address: 172.18.0.164
aliases:
- kibana
- kib
filebeat:
image: "harbor.insightone.cn/efk/filebeat:7.9.1"
container_name: filebeat
hostname: filebeat
restart: always
depends_on:
- elasticsearch
- kibana
user: root
command: ["--strict.perms=false"]
volumes:
- ./filebeat/filebeat.yaml:/usr/share/filebeat/filebeat.yml
- ./filebeat/logs:/usr/share/filebeat/logs
- ./data/insightone/docker-compose/data/logs/server:/usr/share/filebeat/in-logs
#- /var/run/docker.sock:/var/run/docker.sock
networks:
dongjian:
ipv4_address: 172.18.0.165
aliases:
- filebeat
- fb
networks:
dongjian:
external: true
4.5 启动项目
[root@master efk]# docker-compose up -d
4.6 配置kibana
登录kibana配置索引。
查看日志,可以根据想查看的就行过滤。http://192.168.3.158:5601/
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/17306403.html