百亿数据查询秒级响应,观测体系之日志中心该如何玩转?

日志是处理生产故障、性能优化、业务分析的重要参考依据,是系统稳定运行不可或缺的一部分。随着业务系统规模急剧膨胀增大,尤其是是微服务架构逐渐普及,一个系统可能涉及多个应用模块与服务实例,传统模式下运维人员去定位问题显得异常困难,效率低下。

当服务器资源增加时,各种类型的系统日志、业务日志、组件日志、容器日志等散落在不同设备上,故障排查异常艰难,因此构建高效且统一的日志中心能力尤为必要。本文主要研究基于ELK架构实时日志分析平台。

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、日志采集

日志采集类型主要分为三种类型

  1. 系统日志:系统运行日志包含 message 和 secure 等

  2. 服务日志:如数据库的普通运行日志、错误日志、慢查询日志等

  3. 业务日志:应用运行核心日志以 Java 日志 Log4j 居多

日志采集的方式主要有两种类型:⬇️

1)文件方式

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: falsesetup.template.name: "dev-linux"setup.template.pattern: "dev-linux*"setup.template.overwrite: falsesetup.template.settings:  index.number_of_shards: 3  index.number_of_replicas: 2

配置说明:⬇️

type 用于标识日志类型
enabled 用于标识该项采集是否启动生效
path 用于配置采集日志路径,通过模糊匹配模式适配日志文件
tag 用于标识标签
output.elasticsearch 该部分为日志存储服务配置,此处采用副本和分片机制的索引模板来接收不同类型日志存储需求,同时根据需要可添加 elasticsearch 存储认证服务。

2)Kubernetes集群方式

为适配 Kubernetes 环境下 Pod 服务随时变化的日志采集需求,需要设计动态化日志采集。

步骤1)创建sa

apiVersion: v1kind: ServiceAccountmetadata:  name: filebeat  namespace: kube-system  labels:    app: filebeat

步骤2)基于RBAC的角色控制设定​​​​​​​

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name: filebeatsubjects:- kind: ServiceAccount  name: filebeat  namespace: kube-systemroleRef:  kind: ClusterRole  name: filebeat  apiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:  name: filebeat  namespace: kube-systemsubjects:  - kind: ServiceAccount    name: filebeat    namespace: kube-systemroleRef:  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的全文索引功能,具备强大的搜索能力,支持百亿级数据的查询秒级响应,同时局别灵活的集群现行扩展能力为生产级别集中化日志中心提供良好的解决方案。

但是它对日志格式处理能力有限,部分场景日志格式需要借助于其它组件完成预处理和转换,同时在告警、权限管理和关联分析等方面有一定局限性,需要不断优化。

随着开源社区的发展,相信ELK体系会更加成熟和完善,能够满足更多场景化需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/112174.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP 资源路由的简单使用,restfull风格API

ThinkPHP 资源路由的简单使用,restfull风格API 一、资源控制器二、资源控制器简单使用 一、资源控制器 资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用&#xff1a…

【安全】原型链污染 - Code-Breaking 2018 Thejs

目录 准备工作 环境搭建 加载项目 复现 代码审计 payload 总结 准备工作 环境搭建 Nodejs BurpSuite 加载项目 项目链接 ① 下载好了cmd切进去 ② 安装这个项目 可以检查一下 ③运行并监听 可以看到已经在3000端口启动了 复现 代码审计 const fs require(fs) cons…

Vue入门学习(一)

一、Vue环境搭建及第一个Demo 1.1编程工具: 下载Vscode,并安装插件 在Extensions 选项中搜索插件: 1:Live Server:将当前项目作为根路径,启动一个服务端,这样右键就会有如下选项 2:Eclipse …

golang-bufio 缓冲读

缓冲 IO 计算机中我们常听到这样的两种程序优化方式: 以时间换空间以空间换时间 今天要来看的缓冲IO就是典型的以空间换时间,它的基本原理见上图。简单的解释就是:程序不再直接去读取底层的数据源,而是通过一个缓冲区来进行读取…

java Spring Boot将不同配置拆分入不同文件管理

关于java多环境开发 最后还有一个小点 我们一般会将不同的配置 放在不同的配置文件中 好处肯定就在于 想换的时候非常方便 那么 我们直接看代码 我们将项目中的 application.yml 更改代码如下 spring:profiles:active: dev这里 意思是 我们选择了dev 环境 然后创建一个文件 …

【校招VIP】java语言考点之多线程NIO

考点介绍 多线程&NIO考点是校招面试中的常制点之一。 Java NIO是new IO的简称,是一种可以替代Java 10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高…

python项目实战

文章 项目1:外星人入侵游戏项目2:数据可视化2.1 matplotlib2.2 csv文件格式2.3 json文件格式2.4 使用Web API2.4.1 什么是Web API?2.4.2 处理API响应 2.5 使用Pygal可视化仓库 项目3:Web应用程序3.1 Django入门3.1.1 建立项目3.1.2 创建应用…

Redis怎么测试?

有些测试朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么? redis是一个key-value类型的高速存储数据库。 redis常被用做:缓存、队列、发布订阅等。 所以,“redis要怎么…

视频批量剪辑矩阵分发系统源码开源分享----基于PHP语言

批量剪辑视频矩阵分发: 短视频seo主要基于抖音短视频平台,为企业实现多账号管理,视频分发,视频批量剪辑,抖音小程序搭建,企业私域转化等,本文主要介绍短视频矩阵系统抖音小程序开发详细及注意事…

linux创建进程

linux创建进程 准备工作 准备工作 在Ubuntu64系统上 1、安装GCC和Make工具 编译器GCC:把C源码转为二进制程序 Make:自动编译多源文件项目 sudo apt-get update #更新存储库 sudo apt-get install build-essential #安装build-essential包 gcc --versio…

023 - STM32学习笔记 - 扩展外部SDRAM(二) - 扩展外部SDRAM实验

023- STM32学习笔记 - 扩展外部SDRAM(一) - 扩展外部SDRAM实验 本节内容中要配置的引脚很多,如果你用的开发板跟我的不一样,请详细参照STM32规格书中说明对相关GPIO引脚进行配置。 先提前对本届内容的变成步骤进行总结如下&…

C# 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

C# 在调用Cdll时,可能会出现 :试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)这个错误。 一般情况下是C#目标平台跟Cdll不兼容,64位跟32位兼容性问题, a.客户端调用Cdll报的错则, 1)允许的话把C#客户端…

C语言程序设计——小学生计算机辅助教学系统

题目:小学生计算机辅助教学系统 编写一个程序,帮助小学生学习乘法。然后判断学生输入的答案对错与否,按下列任务要求以循序渐进的方式分别编写对应的程序并调试。 任务1 程序首先随机产生两个1—10之间的正整数,在屏幕上打印出问题…

数据库——事务,事务隔离级别

文章目录 什么是事务?事务的特性(ACID)并发事务带来的问题事务隔离级别实际情况演示脏读(读未提交)避免脏读(读已提交)不可重复读可重复读防止幻读(可串行化) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出…

研磨设计模式day12命令模式

目录 定义 几个参数 场景描述 代码示例 参数化设置 命令模式的优点 本质 何时选用 定义 几个参数 Command:定义命令的接口。 ConcreteCommand:命令接口的实现对象。但不是真正实现,是通过接收者的功能来完成命令要执行的操作 Receiver&#x…

创建web应用程序,React和Vue怎么选?

React和Vue都是创建web应用程序的绝佳选择。React得到了科技巨头和庞大的开源社区的支持,代码库可以很大程度地扩展,允许你创建企业级web应用程序。React拥有大量合格甚至优秀的开发人员粉丝,可以解决你在开发阶段可能遇到的任何问题。 毫无疑…

视频汇聚/视频云存储/视频监控管理平台EasyCVR新增首次登录强制修改密码

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…

机器学习:无监督学习

文章目录 线性学习方法聚类ClusteringKmeansHAC 分布表示降维PCAMatrix FactorizationManifold LearningLLELaplacian Eigenmapst-SEN 线性学习方法 聚类Clustering Kmeans 随机选取K个中心,然后计算每个点与中心的距离,找最近的,然后更新中…

感觉车载测试的这一波敏捷风快过去了

敏捷,算不得汽车行业的原生产物,几年前,耳边很少听到这个字眼,基本算是在近几年传统汽车行业开始衰落的大背景下,而后伴随着软件从互联网等行业传进来的。 这两年,大家开始把敏捷谈得风生水起,…

如何保证跨境传输的安全性?

随着互联网时代的到来,全球文件传输频率不断增加,市场经济的发展也对信息共享提出更高要求。传统电话交流已无法满足跨国企业的需求,企业内部诸如Web、电子邮件、企业资源计划(ERP)、网络电话(VOIP&#xf…