百亿数据查询秒级响应,观测体系之日志中心该如何玩转?
1、架构设计
ELK是三个组件缩写,分别表示Elasticsearch,Logstash,Kibana。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。Logstash 主要是用来日志的采集、过滤日志的工具,缺点是性能损耗较大。
Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析的可视化界面,可以帮助汇总、分析和搜索重要数据日志。同时随着 ELK 生态发展,涉及 Beats 日志采集工具,其中轻量化日志采集工具 FileBeat 使用居多。
-
采集端:使用轻量化的 filebeat 组件进行日志采集,收集服务器、容器、应用成等各种数据源生成的实时数据。 -
消息队列:引入 Kafka 消息队列机制用于解决高并发大规模场景下日志读取引发的 IO 性能瓶颈问题和扩展性问题。 -
处理端:Logstash 消费 Kafka 消息队列中的数据,经过日志过滤、分析后,将数据传递给ES集群存储。 -
存储:Elasticsearch 用于日志存储服务,接收 logstash 日志格式处理后的数据,常用索引模板存储不同类型日志,将数据以分片形式压缩存储并提供多种API 供用户查询和操作。 -
展示端:使用 Kibana 检索 Elastisearch 中的日志数据,通过视图、表格、仪表盘、地图等形式可视化呈现日志信息,提供日志分析检索服务。
2、日志采集
-
系统日志:系统运行日志包含 message 和 secure 等 -
服务日志:如数据库的普通运行日志、错误日志、慢查询日志等 -
业务日志:应用运行核心日志以 Java 日志 Log4j 居多
filebeat.yml
核心配置实例filebeat.inputs:
- type: log
enabled: false
paths:
- /tmp/*.log
tags: ["sit","uat"]
fields:
role: "云原生运维"
date: "202308"
- type: log
enabled: true
paths:
- /var/log/*.log
tags: ["SRE","team"]
---------------------------
output.elasticsearch:
enabled: true
hosts: ["192.168.0.1:9200","192.168.0.2:9200","192.168.0.3:9200"]
index: "cmdi-linux-sys-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template.name: "dev-linux"
setup.template.pattern: "dev-linux*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 2
2)Kubernetes集群方式
步骤1)创建sa
apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: kube-system
labels:
app: filebeat
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: filebeat
subjects:
- kind: ServiceAccount
name: filebeat
namespace: kube-system
roleRef:
kind: ClusterRole
name: filebeat
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: filebeat
namespace: kube-system
subjects:
- kind: ServiceAccount
name: filebeat
namespace: kube-system
roleRef:
kind: Role
name: filebeat
apiGroup: rbac.authorization.k8s.io
步骤3)采集服务的cm文件设定
data:
filebeat.yml: |-
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_kubernetes_metadata:
in_cluster: true
matchers:
- logs_path:
logs_path: "/log/containers/"
- drop_event.when.not:
or:
- equals.kubernetes.namespace: sit-dev
output.elasticsearch:
hosts: ['192.168.0.1:9200', '192.168.0.2:9200', '192.168.0.3:9200']
index: "sit-%{[kubernetes.container.name]:default}-%{+yyyy.MM.dd}"
setup.template.name: "sit"
setup.template.pattern: "sit-*"
步骤4)部署daemonset采集服务
containers:
- name: filebeat
image: elastic/filebeat:v8.6.2
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
env:
- name: ELASTICSEARCH_HOST
value: 192.168.0.1
- name: ELASTICSEARCH_PORT
value: "9200"
securityContext:
runAsUser: 0
# If using Red Hat OpenShift uncomment this:
#privileged: true
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
按照以上配置启动容器化采集服务,即可将相关日志采集入库
3.可视化呈现
采集服务启动后,通过 Kibana 对接 Elasticsearch 服务可以查询到日志索引服务,同一类型日志通过不同时间日期索引来区分。⬇️
名称部分为视图名称,自行定义
索引模式通过正则表达式
匹配特定索引源,完成特定数据视图查看。
支持KQL语法的日志检索服务,可以满足关键核心日志查询需求
支持历史日志检索需求
支持自定义刷新频率
多种类型的仪表盘模板和自定义仪表盘 ⬇️
4、总结
ELK日志体系提供日志收集、存储、分析和可视化呈现能力,借助于 Elasticsearch的全文索引功能,具备强大的搜索能力,支持百亿级数据的查询秒级响应,同时局别灵活的集群现行扩展能力为生产级别集中化日志中心提供良好的解决方案。
近期好文:
发表评论