Loki Stack收集MongoDB日志最佳实践(下)

前戏 小白: 前文我们提到了 Fluent Bit 采集器, 我对它的一些配置信息很感兴趣, 它是如何高效采集的? 老花:Fluent Bit 作为一个轻量级的日志收集器,特别适合在 Kubernetes 环境中作为 DaemonSet 运行。它的核心配置涉及服务(services), 解析器(parsers),输入配置(inputs), 输出配置(outputs)等。总结来说, 一套日志流可以定义多个插件, 通过tag和match来流转。 Fluent Bit 核心配置解析 Fluent Bit 架构图 在这个时序图中: Inputs:输入插件收集来自不同输入源的日志记录。 Parsers:解析器插件解析输入的日志记录。 Filters:过滤器插件对日志记录进行特定的修改,如添加或删除键值对,丰富特定元数据,或基于特定条件丢弃记录。 Storage:处理后的数据被认为是安全状态(要么在内存中,要么在文件系统中),然后记录通过适当的输出目的地进行路由。 StreamProcessor:流处理器是一个独立的子系统,它检查存储接口上的新记录。通过配置,流处理器可以附加到来自特定输入插件的记录,或通过应用标签和匹配规则。 Outputs:输出插件将处理后的数据发送到配置的输出目的地。 多线程 Fluent Bit会自动管理输入和输出插件的线程,确保在多线程环境中高效运行。过滤器始终在主线程中运行,而处理器则在各自的输入或输出的独立线程中运行。 内存管理 在容器化环境中,估算Fluent Bit的内存使用量至关重要。可以通过设置Mem_Buf_Limit选项来限制输入插件的内存使用。例如,如果设置Mem_Buf_Limit为 10MB,输出插件在最坏情况下可能会使用20MB,因此总内存需求应为30MB(10MB + 20MB),再加上一定的安全余量。 增量采集 Fluent Bit 通过检查日志文件的偏移量来实现增量采集。它会记录每个文件的最后读取位置,并在下一次采集时从该位置开始,确保不会重复采集。 缓冲与存储 Fluent Bit 通过缓冲机制临时存储处理后的数据,直到数据准备好被发送。 Fluent Bit 使用内存作为主要的临时存储位置,但在某些场景下,使用基于文件系统的持久缓冲机制可以提供聚合和数据安全能力。 输入插件发出的记录被引擎组合在一起形成块,通常大小约为 2MB,默认仅在内存中创建。 如果仅设置内存作为缓冲,它将尽可能多地在内存中存储数据。这是最快的机制,但如果服务因网络慢或远程服务无响应而无法快速分发记录,Fluent Bit 的内存使用量将增加。 背压问题 当日志或数据的产生速度, 超过其被刷新到某些目的地的能力时,会产生背压,导致服务内存消耗增加。Fluent Bit通过Mem_Buf_Limit和storage.Max_Chunks_Up配置参数限制输入插件可以摄入的数据量。 核心配置项 buf_chunk_size: 缓冲区块大小,用于存储日志数据。 buf_max_size: 缓冲区最大大小。 batch_size: 每个批次发送的日志条目数。 batch_wait: 等待更多日志条目到达以填满批次的时间。 mem_buf_limit: 内存缓冲区限制。 mem_buf_flush_count: 触发缓冲区刷新的日志条目数。 这些配置影响内存的使用, 是否产生背压, 以及写入后端outputs的效率(攒批)。 ...

十二月 9, 2024 · 3 分钟 · 622 字 · zhu733756

Loki Stack收集MongoDB日志最佳实践(上)

前戏 老花:小白,我们今天来聊聊收集容器日志的那些事儿。 小白:好啊,老花。我听说有好几种方法可以收集容器日志,你能给我讲讲吗? 常见收集容器日志的方法 老花:当然可以。最常见的有两种方法:Sidecar和DaemonSet。 Sidecar:俗称边车, 在每个需要收集日志的容器旁边运行一个Sidecar容器,专门负责日志收集。这种方法的好处是可以为每个应用提供定制化的日志收集配置,但缺点是资源消耗较大,因为每个应用都需要额外的容器。 DaemonSet:在Kubernetes集群的每个节点上运行一个Pod,负责收集该节点上所有容器的日志。优点是资源消耗较小,因为每个节点只需要一个Pod。缺点是配置不够灵活,因为所有容器共享同一个日志收集配置。 小白:我明白了,那我们通常用哪种方法呢? 老花:这取决于你的具体需求。如果你需要高度定制化的日志收集策略,可能会选择Sidecar。如果你更关心资源消耗,DaemonSet可能更适合。 日志收集系统优缺点 老花:不管是哪种收集方式, 都需要暴露日志路径给收集器。日志除了收集, 通常还有轮转、转换、存储和可视化查询等组件整合在一起, 组成强大日志收集系统。 我们来聊聊几个常见的日志收集系统: 采集、转换、扭转: Loki:轻量级,易于水平扩展,但不支持全文搜索。 Fluentd/Fluent Bit:Fluent Bit 轻量级,插件丰富,Fluentd 插件丰富,支持多种数据源和目的地,灵活的配置,适合大规模部署。 Logstash:功能强大,但资源消耗大,配置复杂。 Filebeat:轻量级,易于配置,但功能不如 Logstash。 网易和阿里开源的采集组件也很强大。 存储: Elasticsearch/ OpenSearch,搜索能力强,但成本高; ClickHouse(CK),查询速度快,成本较低。 套件: ELK Stack(Elasticsearch, Logstash, Kibana):功能强大,但资源消耗大,配置复杂。 EFK Stack(Elasticsearch, Fluent, Kibana):功能强大,fluent-bit资源消耗低, 插件不如fluentd丰富,配置容易。 Loki on grafana:采集组件可以使用promtail或者fluent-bit, 不需要额外的存储, 还自带可视化界面 UI, 多租户, 读写分离, 但不支持全文搜索。 各种采集器+ Kafka + ClickHouse +ClickVisual 等等。 小白:听起来每个系统都有它的优缺点,我们应该怎么选择呢? 老花:确实,选择哪个系统取决于你的具体需求,比如预算、资源、搜索需求等。 Loki 接入 MongoDB 分片集群日志最佳实践 小白:老花,我们公司正在用 MongoDB 分片集群,你觉得用 Loki 来收集日志怎么样? 老花:这是个好问题。Loki 可以很好地集成 MongoDB 分片集群的日志。我们可以部署 Promtail或者Fluent-bit 等采集器 作为 DaemonSet 来收集 MongoDB 的日志,然后将它们发送到 Loki。 ...

十二月 6, 2024 · 3 分钟 · 553 字 · zhu733756

深入了解MongoDB日志系统

前戏 小白: 嘿,老花,我最近在研究 MongoDB 的日志系统,你能给我介绍一下 MongoDB 有哪些日志吗? 老花: 当然可以,小白。MongoDB 主要有四种日志:系统日志、Journal 日志、主从日志(oplog)和慢查询日志 。让我一一解释给你听。 首先, 我们看下不同组件的配置文件描述信息。 不同组件的配置文件 shardsvr 下面我们演示从之前部署的集群上获取一个数据节点shardsvr的启动配置: $ kubectl -n mongodb-sharded exec -it mongodb-sharded-shard0-data-0 -- bash $ ps -ef UID PID PPID C STIME TTY TIME CMD 1001 1 0 2 Nov30 ? 00:46:47 /opt/bitnami/mongodb/bin/mongod --config=/opt/bitnami/mongodb/conf/mongodb.conf $ cat /opt/bitnami/mongodb/conf/mongodb.conf # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: dbPath: /bitnami/mongodb/data/db directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /opt/bitnami/mongodb/logs/mongodb.log verbosity: 0 # network interfaces net: port: 27017 unixDomainSocket: enabled: true pathPrefix: /opt/bitnami/mongodb/tmp ipv6: false bindIpAll: true #bindIp: # replica set options replication: replSetName: mongodb-sharded-shard-0 enableMajorityReadConcern: true # sharding options sharding: clusterRole: shardsvr # process management options processManagement: fork: false pidFilePath: /opt/bitnami/mongodb/tmp/mongodb.pid # set parameter options setParameter: enableLocalhostAuthBypass: false # security options security: authorization: enabled keyFile: /opt/bitnami/mongodb/conf/keyfile 这个 MongoDB 配置文件包含了多个部分,每个部分都用于设置 MongoDB 实例的不同配置选项。以下是对每个部分的详细分析: ...

十二月 3, 2024 · 6 分钟 · 1067 字 · zhu733756