EFK on Kubernetes

elastic公司产品链。,文档类数据库,使用Java语言,收集端logstash后来用go语言改写了(使用filebeat),查询方便(配合展示界面可以不用语句就可以查询,并且查询速度快),原理:按照类似索引的机制查询,数据全部归于索引之下

ELK:logstash

EFK:采集:filebeat,fluentd

存储:elasticsearch

展示:kibana

logstash现在少用于收集,多用于过滤。

安装 ElasticSearch
Bash 复制代码
# Add the Elastic Helm charts repo
helm repo add elastic https://helm.elastic.co
helm repo update
# 查询版本 我们使用 7.17.3
[root@master-01 ~]# helm search repo  elastic/elasticsearch  -l
NAME                         CHART VERSION        APP VERSION        DESCRIPTION                                  
elastic/elasticsearch        8.5.1                8.5.1              Official Elastic helm chart for Elasticsearch
elastic/elasticsearch        7.17.3               7.17.3             Official Elastic helm chart for Elasticsearch
elastic/elasticsearch        7.17.1               7.17.1             Official Elastic helm chart for Elasticsearch
elastic/elasticsearch        7.16.3               7.16.3             Official Elastic helm chart for Elasticsearch
elastic/elasticsearch        7.16.2               7.16.2             Official Elastic helm chart for Elasticsearch

[root@master-01 ~]#  helm pull elastic/elasticsearch --version=7.17.3

修改 values

Bash 复制代码

安装

Bash 复制代码
[root@master-01 20-log]#helm upgrade --install els -n logging -f elasticsearch/els-values.yaml  ./elasticsearch --create-namespace --namespace logging 
NAME: els
LAST DEPLOYED: Sat Nov 18 20:17:57 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.
  $ kubectl get pods --namespace=logging -l app=elasticsearch-master -w2. Test cluster health using Helm test.
  $ helm --namespace=logging test els
  
  
  
  rpm安装:
  rpm -ivh elasticsearch-7.17.16-x86_64.rpm
  cd /etc/elasticsearch
  vim elasticsearch.yml		#修改配置文件
  修改
  ps: 在所有配置文件中network.host如果0.0.0.0访问不了请修改成本机ip地址

systemctl restart elasticsearch

tail -f/var/log/elasticsearch/my-cluster.log

#查看日志起来没,如果内存不够可能起不来

ElaticSearch监听端口

9200 client ->server

9300 servier ->server #集群选举需要互相访问

集群验证

Bash 复制代码
[root@master-01 20-log]# kubectl get pod -n logging  -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
elasticsearch-master-0   1/1     Running   0          99s   10.244.171.24    worker-01   <none>           <none>
elasticsearch-master-1   1/1     Running   0          74s   10.244.184.101   master-01   <none>           <none>

[root@master-01 20-log]# curl 10.244.37.199:9200/_cluster/health?pretty
{"cluster_name":"elasticsearch","status":"green","timed_out":false,"number_of_nodes":2,"number_of_data_nodes":2,"active_primary_shards":1,"active_shards":2,"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}

三种集群状态:red	集群挂掉
yellow	告警(3个节点挂掉一个)
green	正常

索引:app-name	按天创建索引,每个索引里放很多日志
安装 Kibana

[root@master-01 20-log]# helm search repo elastic/kibana -l

NAME CHART VERSION APP VERSION DESCRIPTION

elastic/kibana 8.5.1 8.5.1 Official Elastic helm chart for Kibana

elastic/kibana 7.17.3 7.17.3 Official Elastic helm chart for Kibana

elastic/kibana 7.17.1 7.17.1 Official Elastic helm chart for Kibana

拉取 chart

helm pull elastic/kibana --version=7.17.3

[root@master-01 20-log]# helm -n logging install kibana -f kibana/kibana-values.yaml ./kibana

NAME: kibana

LAST DEPLOYED: Sat Nov 18 20:49:28 2023

NAMESPACE: logging

STATUS: deployed

REVISION: 1

TEST SUITE: None

更新

[root@master-01 20-log]# helm -n logging upgrade kibana -f kibana/kibana-values.yaml ./kibana

Release "kibana" has been upgraded. Happy Helming!

NAME: kibana

LAST DEPLOYED: Sat Nov 18 21:14:34 2023

NAMESPACE: logging

STATUS: deployed

REVISION: 2

TEST SUITE: None

rpm安装:

rpm -ivh kibana-7.17.16-x86_64.rpm

vim /etc/kibana/kibana.yml

修改

systemctl restart kibana

#直接用浏览器访问5601端口

安装 Filebeat
Bash 复制代码
[root@master-01 20-log]# helm search repo  elastic/filebeat  -l
NAME                    CHART VERSION        APP VERSION        DESCRIPTION                             
elastic/filebeat        8.5.1                8.5.1              Official Elastic helm chart for Filebeat
elastic/filebeat        7.17.3               7.17.3             Official Elastic helm chart for Filebeat
elastic/filebeat        7.17.1               7.17.1             Official Elastic helm chart for Filebeat
elastic/filebeat        7.16.3               7.16.3             Official Elastic helm chart for Filebeat


[root@master-01 20-log]# helm pull elastic/filebeat --version=7.17.3
[root@master-01 20-log]# helm -n logging install filebeat  -f filebeat/filebeat-values-1.yaml  ./filebeat

NAME: filebeat
LAST DEPLOYED: Sat Nov 18 21:53:15 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all containers come up.
  $ kubectl get pods --namespace=logging -l app=filebeat-filebeat -w
  
  rpm安装:
  rpm -ivh filebeat-7.17.15-x86_64.rpm
  vim /etc/filebeat/dilebeat.yml
  修改
  systemctl restart filebeat
总结

efk集群配置方案和建议 来解决导致集群负载过高问题

shell 复制代码
早期是ELK 现在是EFK 是一个日志管理方案,部署的对象都是daemonset
ELK 和 EFK 的区别?
使用不同的日志收集工具,ELK使用Logstash(log死dei起) 收集和解析日志,而EFK是使用Filebeat(非儿比特) 作为日志收集工具,相较Logstash更为轻量,替代Logstash常用于 Kubernetes 环境中。
EFK
日志采集                 日志存储                     日志搜索、展示 可观测支持APM(链路追踪)
Filebeat(非儿比特) Elasticsearch(一来克search)     Kibana(k把那)  
Fluentd(符路特D)

Elasticsearch集群的方式运行,3个节点Elasticsearch高可用

Elasticsearch的核心功能,1节点node 每一个节点代表一个Elasticsearch 2索引index: 它会根据日期自动为每一批次的日志创建一个新的索引  3分片 shard 把索引会被切成一块一块的小分片来存储到不同的节点,maseter上是主分片和node上是副本分片,来实现数据不丢失


日志格式一般是 json
普通日志是一行 key:value 的格式  java的日志是多行日志 用异常日志 Exception


Kubernetes 容器 中日志 采集方案
filebeat 采集 日志文件:应用运行时 输出 日志 文件
filebeat  采集 日志容器  容器 stdout stderr 用logrotate采集
/var/log/pods  #k8s保存pod日志的目录
/var/log/containers/*.log #container log

目前最推荐的日志采集方案是在每个节点上部署一个filebeat,并使用Kubernetes的Operator进行管理采集。 
k8s的efk的日志框架(节点级别的日志代理):  在每个节点上部署一个名为filebeat的log agent代理,它会收集该节点上所有pod的日志,并将其存入日志后端(logging backend)。
另一方案: sidecar 每个容器额外挂载了一个监控容器

开源 日志采集方案有 ELK  EFK (适合大型日志(一天1tb以上的日志)) Loki
开源 Loki  是参照 Grafana 和 prometheus 设计了一套轻量级的日志采集和管理方案
     Loki 中小公司日志采集方案
组件
- `loki`: 负责存储日志和处理查询     类似elasticsearch
- `promtail`: 代理,负采集日志并将其发送给 loki  类似filebeat
- `grafana`: UI 界面用来展示日志  类似kibana
loki架构: 
日志首先通过promtail采集并打上标签,然后进入Distributor(分发器)组件进行校验和过滤,接着由Ingester(接收器)组件决定日志存储位置(如对象存储或普通磁盘),并根据时间戳自动删除旧的日志。此外,还有一个ruler(规则器)组件负责对日志触发告警,可以与alertmanager结合使用。查询功能由query(查询器)和query frontend(查询前端)两个组件实现,它们分别用来解析logQL查询语言并执行查询。查询结果最终会通过log storage(后端存储)展示 ,这些都是loki的组件 ,日志展示由grafana显示。

在日志存储方案中,如果日志量较大时,如何避免网络IO成为瓶颈?
一 当日志量非常大时,可以考虑采用SSD类型的NAS存储日志,其网络速度更高,能更好地处理大容量日志的存储和读取。
二 (推荐) 将elasticsearch的日志写入文件,再归档到OSS(便宜)等云端存储服务中

商业 解决方案 阿里云的SLS 底层是agent  > SLS(elasticsearch) 由于日志包含敏感 业务 信息,所有使用的比较少
相关推荐
星星点点洲7 分钟前
Docker常用命令
docker·容器
小梦想的博客1 小时前
k8s部署logstash
云原生·容器·kubernetes
凤山老林9 小时前
Docker 部署 RabbitMQ | 自带延时队列
docker·容器·rabbitmq
自信人间三百年9 小时前
从零开始学Docker(一)-镜像列表访问不到问题
运维·docker·容器
freflying111911 小时前
使用Jenkins实现鸿蒙HAR应用的自动化构建打包
自动化·jenkins·harmonyos
大熊程序猿11 小时前
docker grafana安装
docker·容器·grafana
凤山老林14 小时前
Docker 部署 verdaccio 搭建 npm 私服
前端·docker·容器·npm
小Tomkk14 小时前
Docker 部署 Grafana 教程
docker·容器·grafana
da pai ge17 小时前
k8s集群rou-yi项目微服务应用部署
微服务·容器·kubernetes