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地址
![](https://img-home.csdnimg.cn/images/20230724024159.png)
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集群配置方案和建议 来解决导致集群负载过高问题
![](https://img-home.csdnimg.cn/images/20230724024159.png)
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) 由于日志包含敏感 业务 信息,所有使用的比较少