首页 > 其他分享 >百亿数据查询秒级响应,观测体系之日志中心该如何玩转?

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

时间:2023-08-29 11:04:52浏览次数:35  
标签:filebeat name 192.168 采集 秒级 玩转 日志 log

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

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

1、架构设计

ELK是三个组件缩写,分别表示Elasticsearch,Logstash,Kibana。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。Logstash 主要是用来日志的采集、过滤日志的工具,缺点是性能损耗较大。

Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析的可视化界面,可以帮助汇总、分析和搜索重要数据日志。同时随着 ELK 生态发展,涉及 Beats 日志采集工具,其中轻量化日志采集工具 FileBeat 使用居多。

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

此架构适用于生产级别高并发日志采集需求

  • 采集端:使用轻量化的 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: 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

配置说明:⬇️

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

2)Kubernetes集群方式

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

步骤1)创建sa

apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat
  namespace: kube-system
  labels:
    app: filebeat

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

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 服务可以查询到日志索引服务,同一类型日志通过不同时间日期索引来区分。⬇️

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

创建数据视图,为不同类型索引创建对应的可视化视图信息。
名称部分为视图名称,自行定义

索引模式通过正则表达式匹配特定索引源,完成特定数据视图查看。

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

可视化呈现数据视图 ⬇️

支持不同灵活的选定日志字段进行组合呈现
支持KQL语法的日志检索服务,可以满足关键核心日志查询需求
支持历史日志检索需求
支持自定义刷新频率

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

多种类型的仪表盘模板和自定义仪表盘 ⬇️

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

4、总结

ELK日志体系提供日志收集、存储、分析和可视化呈现能力,借助于 Elasticsearch的全文索引功能,具备强大的搜索能力,支持百亿级数据的查询秒级响应,同时局别灵活的集群现行扩展能力为生产级别集中化日志中心提供良好的解决方案。

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

标签:filebeat,name,192.168,采集,秒级,玩转,日志,log
From: https://blog.51cto.com/u_15576159/7273428

相关文章

  • 认识.NET 日志系统
    认识.NET日志系统基本概念日志级别:Trace<Debug<Information<Waring<Error<Critical日志提供者(LoggingProvider):把日志输出控制台、文件、数据库等。.NET的日志非常灵活,对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么样的格式、是否输出等都有配置......
  • mysql日志追踪 / 数据恢复
    1.查看日志开启状态showvariableslike'log_%';2.查看日志文件列表showbinarylogs;或者showmasterlogs;3.查看当前日志index位置showmasterstatus;4.查看binlog关键事件showbinlogevents[IN'log_name'][FROMpos][LIMIT[offset,]row_c......
  • Nginx 日志分析
    常用分析命令1、根据访问IP统计UVawk'{print$1}'paycenteraccess.log|sort-n|uniq|wc-l2、查询访问最频繁的IP(前10)awk'{print$1}'/var/log/nginx/access.log|sort-n|uniq-c|sort-rn|head-n103、查看某一时间段的IP访问量(1-8点)awk'$4>="[25......
  • 在Delphi上位机软件中 增加采集卡工作状态输出成日志的功能
    TApdComPort控件实现了串口的通信控件有Logging属性决定了当前的日志状态QDACQLog可以生成日志一:日志发送到远程syslog服务器:varAWriter:=TQLogSocketWriter.Create;AWriter.ServerHost:=127.0.0.1;//远程服务器地址AWriter.ServerPort:=514; //远程服务器端......
  • 【INFINI Workshop 深圳站】8 月 31 日一起动手实验玩转 Easysearch
    8月31日下午和INFINILabs的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中。欢迎大家免费报名参加。活动时间:2023-08-3113:30~17:30活动地点:广东深圳南山区科发路91号华润置地大厦D座5层05A会议室......
  • 自定义注解实现日志打印
    首先什么是自定义注解?自定义注解是Java语言提供的一种机制,允许程序员定义自己的注解类型。注解是源代码级别的元数据,可以提供额外的信息给编译器、解析工具和运行时环境。下面是创建自定义注解的一般步骤:使用@interface关键字定义注解类型,注解类型名通常以@作为前缀,如@MyAnnotation......
  • 玩转FusionCharts:Div层被Flash遮住
    在应用FusionCharts的过程中,可能会出现页面的Div层被flash遮住的情况,笔者在应用的过程中就出现过这样的情况,当时是一个日期控件被FusionCharts的flash挡住了,这个问题的解决方式其实也很简单。 我们知道要使一个普通的flash保持透明的设置是将flash的属性transparent设为wmode,但在F......
  • Java日志框架的依赖设置备查(SLF4J, Log4j, Logback)
    前言最近在看代码的过程中,发现身边的许多人在使用Java日志框架时,对于应该引入何种依赖不甚了解,搜索网络上的文章,常常也是互不一致。这篇文章可以看着是Java日志框架的入门使用和实践建议,重点介绍不同组合方式下的依赖设置及其背后的逻辑,一方面给自己备查,另外也希望对小伙伴们......
  • 使用filebeat监听异常日志发送redis
    使用场景:自定义监听日志关键字符,第一时间发现生产问题,实测从服务打出异常日志到redis监听到日志延迟在5s左右适用于:服务机器数有限的情况,目前全部采用手动部署的方式,一、在目标机器上部署filebeat官网下载filebeathttps://artifacts.elastic.co/downloads/beats/filebeat/......
  • 玩转K8s + Istio
    K8S与Istio分工Istio介绍术语服务网格(ServiceMesh)用来描述组成应用程序的微服务网络以及它们之间的交互,它的核心思想就是Sidecar模式。Sidecar模式是一种将应用功能从应用本身剥离出来作为单独进程的设计模式,该模式允许我们向应用无侵入添加多种功能。通信的事情全部交给......