当前位置: 首页 > news >正文

Loki 分布式日志中心服务

目录

Loki 是什么

Loki 配置文件介绍

Loki 安装

Promtail 配置文件介绍

Promtail 安装

Loki 整合 Grafana


Loki 是什么

Loki 是一个专为日志聚合和查询设计的开源分布式日志管理系统,由 Grafana Labs 开发。它与 Prometheus 类似,但用于处理日志,而不是指标数据。

Loki 特点

  1. 分布式架构:Loki 采用分布式设计,可以水平扩展,以处理大量的日志数据。它由多个组件构成,包括接收器、存储和查询服务,这些组件可以在不同的服务器上运行,以支持高吞吐量和高可用性。

  2. 标签系统:类似于 Prometheus,Loki 使用标签来组织和查询日志。标签是附加在日志流上的元数据,例如服务名、环境、主机等。这样可以很容易地通过标签来过滤和检索日志。

  3. 低成本存储:Loki 主要对日志的元数据进行索引(如时间戳和标签),而不是对日志内容进行全文索引。这种设计降低了存储和计算的成本,使 Loki 更加高效。

  4. 与 Prometheus 集成:Loki 可以与 Prometheus 结合使用,使用户可以通过 Grafana 进行统一的指标和日志视图。在 Grafana 中,你可以同时查看来自 Prometheus 的指标数据和来自 Loki 的日志数据。

  5. 易于部署和扩展:Loki 可以与 Promtail、Fluentd 或 Fluent Bit 等日志收集器一起使用,简化了日志的收集和发送过程。Loki 的分布式设计还支持通过添加更多节点来扩展容量。

Loki 核心组件

  • Loki: 这是日志聚合系统的核心组件。Loki 负责存储、索引和检索日志数据。它采用类似于时间序列数据库的设计,但与传统日志系统不同,它主要将日志数据按时间和标签进行分组和索引,而不是对日志内容进行复杂的索引。

  • Promtail: 这是一个日志收集器,它将日志从文件、系统日志等来源收集并发送到 Loki。Promtail 负责对日志进行预处理和标记(附加标签),使日志可以在 Loki 中进行有效的索引和查询。

  • Fluentd/Logstash (可选): 虽然 Promtail 是 Loki 推荐的日志收集工具,但你也可以使用 Fluentd 或 Logstash 作为日志收集器,将日志数据发送到 Loki。

  • Grafana: 这是用于可视化日志数据的前端工具。Grafana 可以与 Loki 集成,允许你查询和展示存储在 Loki 中的日志数据,提供强大的数据可视化和分析功能。


Loki 配置文件介绍

loki-config.yaml 文件参数介绍

auth_enabled: false  # 是否启用身份验证,默认不启用# 配置 Loki 服务器的相关参数
server:http_listen_port: 3100					# Loki 监听的 HTTP 端口,默认是 3100。log_level: info							# Loki 日志的日志级别,如 info、debug、warn、error 等。grpc_server_max_recv_msg_size: 4194304    # GRPC服务器的最大接收消息大小# 配置日志的 ingester 相关参数,控制日志数据的存储和处理。
ingester:chunk_target_size: 1048576				# 每个 chunk 的目标大小,单位是字节。chunk_idle_period: 5m						# 如果一个 chunk 在此时间段内没有新数据,它将被标记为闲置,loki将关闭此块。chunk_retain_period: 30s					# 关闭块后 30 秒内持久化到磁盘。max_chunk_age: 1h							# 每个 chunk 的最大年龄,超过这个时间的 chunk 会被处理。lifecycler:								# 控制 ingester 生命周期的组件。ring:									# 用于管理 ingester 集群的状态。kvstore:								# 配置 key-value 存储store: inmemory						# 设置为 inmemory,表示使用内存作为 kvstore,适用于开发和测试环境。replication_factor: 1					# 日志数据的复制因子,设置为 1 表示不进行数据复制。# 配置 Loki 存储后端的相关设置。
storage_config:boltdb_shipper:							# BoltDB Shipper 是一个索引存储类型,配置包括索引目录、缓存位置和共享存储类型。active_index_directory: /loki/index		# 索引文件存储目录cache_location: /loki/cache				# 缓存文件位置shared_store: filesystem				# 共享存储类型filesystem:								# 文件系统存储配置directory: /loki/chunks					# 指定日志数据存储目录# 配置 Loki 使用的存储模式和索引策略。
schema_config:configs:- from: 2020-10-24						# 配置生效开始日期。该日期之后接收到的所有日志都会使用这个配置。store: boltdb							# 存储类型,boltdb 表示 BoltDB。boltdb-shipper,表示使用 BoltDB Shipper 存储索引object_store: filesystem				# 对象存储类型,filesystem 表示使用文件系统存储。schema: v11								# 使用的模式版本。index:									# 索引的前缀和周期。prefix: index_						# 索引的前缀,设置为 index_。period: 24h							# 索引周期,设置为 24 小时。表示每 24 小时生成一个新的索引。# 配置日志压缩器的相关设置。
compactor:working_directory: /loki/compactor		# 压缩器的工作目录。shared_store: filesystem					# 共享存储类型,通常是 filesystem。# 配置 Loki 的资源限制设置。
limits_config:ingestion_rate_mb: 100					# 每秒的最大 ingestion 速率,单位是 MB。ingestion_burst_size_mb: 200				# 允许的最大突发 ingestion 大小,单位是 MB。max_streams_per_user: 10000				# 每个用户允许的最大流数量。enforce_metric_name: false				# 是否强制执行指标名称规则,设置为 false,即不强制。reject_old_samples: true					# 是否拒绝旧的样本,设置为 true。reject_old_samples_max_age: 168h			# 最大允许的样本年龄,设置为 168 小时(7 天)。超过这个时间的样本会被拒绝。# 配置 chunk 存储。
chunk_store_config:max_look_back_period: 0s					# 最大回溯时间,设置为 0s 表示没有回溯时间限制。此设置影响在查询时 Loki 可以回溯的时间段。# 管理表格和数据保留策略。
table_manager:retention_deletes_enabled: false			# 是否启用数据保留删除功能,设置为 false,表示不启用。retention_period: 0s						# 设置为 0s 表示禁用数据保留策略,即不会自动删除数据。所有数据将一直保留,直到手动删除或其他外部原因导致数据丢失。如果你希望设置一个实际的保留时间(例如 7 天),可以将其设置为 7d。这样,Loki 会保留过去 7 天的数据,超过这个时间的数据将会被自动删除。# 配置 Loki 的前端服务。
frontend:max_chunk_age: 1h							# 前端服务中 chunk 的最大年龄。

Loki 安装

创建一个目录用于存储 Loki 数据

# 创建目录
mkdir -p /opt/loki/data# 授予读写权限
chmod 775 /opt/loki/data

创建 Loki 配置文件 loki-config.yaml,内容如下:

vim /opt/loki/data/loki-config.yaml
auth_enabled: false					# 禁用身份验证,适用于本地或测试环境。server:http_listen_port: 3100			# Loki 将在本地的 3100 端口上提供 HTTP 服务。ingester:lifecycler:ring:kvstore:store: inmemory				# 使用内存来管理 ingester 的哈希环。在生产环境中,推荐使用 etcd 或 consul。replication_factor: 1			# 定义每条日志数据的副本数量。在这里,副本因子为 1,表示数据只存储在一个节点上。生产环境中通常设置为 2 或 3,以提高数据可靠性。chunk_idle_period: 15m			# 如果日志 15 分钟没有更新,将关闭该日志的块。chunk_retain_period: 30s			# 关闭块后 30 秒内持久化到磁盘。max_transfer_retries: 0schema_config:configs:- from: 2020-10-24				# 从指定日期开始使用此配置。store: boltdb-shipper			# 使用 boltdb-shipper 作为索引存储。object_store: filesystem		# 日志块和索引都存储在文件系统中。schema: v11index:prefix: index_				# 索引前缀period: 24h					# 每 24 小时为一周期创建一个新的索引。storage_config:boltdb_shipper:active_index_directory: /opt/loki/data/index		# 活跃索引的存储路径cache_location: /opt/loki/data/cache				# 用于存储索引缓存的目录。shared_store: filesystemfilesystem:directory: /opt/loki/data/chunks					# 日志块存储在 /tmp/loki/chunks。limits_config:enforce_metric_name: false					# 不强制要求日志必须有 __name__ 标签。reject_old_samples: true						# 是否拒绝旧的样本,设置为 true。reject_old_samples_max_age: 168h				# Loki 将拒绝超过 7 天的旧日志数据。chunk_store_config:max_look_back_period: 0s						# 没有日志回溯时间的限制。compactor:working_directory: /opt/loki/data/compactor    # 压缩工作目录retention_enabled: truetable_manager:retention_deletes_enabled: true                # 是否自动删除retention_period: 30d                          # 自动删除30天之前的数据

拉取 Loki 的官方 Docker 镜像

docker pull grafana/loki

如果docker一直拉不下来,请按这样操作:https://devpress.csdn.net/cloudnative/66d58f0f28d2c87ccbb2eaad.html

https://github.com/DaoCloud/public-image-mirror

启动 Loki 容器

docker run -d \--name loki \-p 3100:3100 \--user root \-v /opt/loki/data/loki-config.yaml:/etc/loki/local-config.yaml \-v /opt/loki/data:/opt/loki/data \grafana/loki \-config.file=/etc/loki/local-config.yaml

查看 Loki  容器启动日志

docker logs loki

开放防火墙端口 (和云服务安全组端口)

firewall-cmd --zone=public --add-port=3100/tcp --permanent   
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

使用如下命令验证 Loki 是否启动成功

curl -G 'http://localhost:3100/loki/api/v1/query' --data-urlencode 'query={job="varlogs"}'

获取 Loki 容器ip地址

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' loki

Promtail 配置文件介绍

Promtail 是 Loki 的日志收集器,用于从文件、系统日志等来源收集日志并推送到 Loki。Promtail 的配置文件是 YAML 格式,定义了从哪些日志源收集日志、如何处理日志,以及将日志发送到 Loki 或其他输出目标的方式。

promtail.yaml 文件参数介绍

# 定义了 Promtail 的 HTTP 和 gRPC 监听端口,用于获取健康状态和指标信息。
server:http_listen_port: 9080							# Promtail 提供 HTTP 端口(默认 9080),用于健康检查和 Prometheus metrics。grpc_listen_port: 0								# gRPC 服务端口,默认不启用(设置为 0 关闭)。# 记录 Promtail 已经读取的日志文件位置,用于重启后继续读取未读取的日志。
positions:filename: /var/log/promtail/positions.yaml		# 位置文件的路径,Promtail 会在这里存储读取日志文件的偏移量,确保不会重复读取已处理过的日志。# 定义了 Promtail 如何将日志推送到 Loki(或其他兼容的后端)。
clients:- url: http://loki:3100/loki/api/v1/push			# Loki 服务的 URL,Promtail 将日志推送到此地址。通常为 Loki 的 /loki/api/v1/push 端点。# 是 Promtail 配置中最核心的部分,定义了日志源及其相应的标签和处理方式。它的结构类似于 Prometheus 的 scrape_configs
scrape_configs:- job_name: system						# 日志抓取任务的名称,自定义随便写static_configs:							# 静态配置日志来源。- targets:							# 目标地址,通常设置为 localhost,因为 Promtail 在本地收集日志。- localhostlabels:								# 分配给日志流的标签,可以为日志流添加自定义标签,常见的标签有 job 和 __path__job: varlogs__path__: /var/log/*.log			# 采集日志文件的路径,支持通配符。Promtail 会根据这个路径匹配文件。- job_name: custom_logsstatic_configs:- targets:- localhostlabels:job: custom__path__: /opt/logs/*.logpipeline_stages:						# 用于在日志推送到 Loki 之前对日志进行预处理。常见的处理步骤包括日志格式解析、标签提取、过滤和时间戳转换等。- match:								# 用于选择日志流,可以根据标签选择要处理的日志。selector: '{job="custom"}'		# 日志选择器,用于匹配特定标签的日志流。stages:							# 日志处理的阶段。- json:							# 将日志解析为 JSON,并提取指定字段作为标签。expressions:				# 定义从 JSON 日志中提取哪些字段。level: levelmsg: message- labels:						# 指定哪些字段会成为 Loki 中的标签。level:- timestamp:source: timeformat: RFC3339				# 定义日志中的时间戳字段,并指定其格式。这里使用了 RFC3339 格式。# 控制 Promtail 的资源使用,以避免过高的资源消耗。
limits_config:max_entry_size: 512000       # 单个日志条目的最大大小,单位为字节(默认为 500 KB)。如果日志条目超过这个大小,Promtail 会丢弃这个条目。# 配置 Promtail 的 Prometheus 指标导出,以便 Prometheus 监控 Promtail 的状态和性能。
metrics:port: 3101                  # Prometheus 指标端口path: /metrics              # Prometheus 指标路径# 配置日志目标的同步周期。
target_config:sync_period: 10s            # 指定日志源同步的时间间隔。Promtail 会根据这个周期检查和更新日志文件的状态。默认值是 10 秒。# (全局配置)定义了在日志推送到 Loki 之前的处理管道。每个阶段处理日志的不同方面。
pipeline_stages:- docker: {}                 # 示例:Docker 日志处理阶段- json:                      # 示例:JSON 解析处理阶段expressions:			   # 定义要从 JSON 日志中提取的字段。例如,level 和 msg。level: levelmsg: message- labels:                    # 从日志中提取字段作为标签。这可以用于根据日志内容动态地创建标签。level- timestamp:                 # 示例:处理日志的时间戳阶段。source: time			   # 指定时间戳字段来源,例如 time。format: RFC3339		   # 时间戳格式,支持的格式包括 RFC3339 和其他标准日期格式。# 用于覆盖默认配置,为特定日志源配置不同的处理方式。
overrides:- source: /var/log/*.log     # 指定要覆盖默认配置的日志源路径。path: /fluentd/log/*.log   # 在 Promtail 中指定日志文件路径(例如,容器内部路径)。labels:					   # 为日志流指定额外的标签,覆盖默认标签设置。job: override# 用于配置与其他系统或插件的集成。
integrations:- name: integration_name     # 集成的名称,例如第三方插件或系统的名称。config:key: value               # 集成的配置项,取决于具体集成的要求。# 用于为日志流添加外部标签。
external_labels:cluster: my-cluster  # 外部标签,用于标识日志来源的集群或其他标识符。这些标签将被附加到所有日志流中。# 配置日志块的大小
chunk_target:size: 100m           # 设置日志块的最大大小。用于控制 Promtail 将日志分成多大的块进行处理。默认为 100 MB。# 配置日志采样器,用于从日志流中采样数据。
samplers:- name: sampler_name			# 采样器的名称,用于定义不同的采样策略。config:						# 采样器的配置项,具体配置取决于所使用的采样器类型。key: value

Promtail 安装

需要抓取哪台服务器的日志?就把 promtail 在那台服务器上安装并运行。

创建一个目录用于存储 promtail 数据

mkdir -p /opt/promtail/data# 授予读写权限
chmod 775 /opt/promtail/data

创建 Promtail 配置文件 promtail.yaml,内容如下:

vim /opt/promtail/data/promtail.yaml
server:http_listen_port: 9080positions:                                          # 记录 Promtail 已经读取的日志文件位置,用于重启后继续读取未读取的日志。确保不会重复读取已处理过的日志。filename: /opt/promtail/data/promtail-positions.yaml        # 这个路径在容器内,需要挂载到物理机上clients:- url: http://172.17.0.3:3100/api/prom/push     # Loki 服务的 URL,Promtail 将日志推送到此地址。通常为 Loki 的 /loki/api/v1/push 端点。如果 loki和promtail使用同一台机器的docker部署的,这里的http://loki 地址是loki容器ip地址,也可以写物理机IP地址scrape_configs:- job_name: spring_logs                   # 日志抓取任务的名称,例如抓取springboot的,就叫spring_logsstatic_configs:- targets:                            # 由于 Promtail 是用于收集本地日志的,因此 targets 一般配置为 localhost,或使用虚拟主机名,这样 Promtail 可以从容器内的文件系统中抓取日志。- localhost                       # localhost 表示抓取容器内的日志labels:job: varlogs                      # 自定义标签名称,例如,你可以通过查询 job="varlogs" 来筛选出所有带有 job=varlogs 标签的日志server: 192.168.10.10				# 自定义标签名称,例如,你可以通过查询 server="192.168.10.10" 来筛选出所有带有 server=192.168.10.10 标签的日志,表示这里的日志都来自 192.168.10.10 的机器__path__: /var/log/*.log          # 抓取容器内哪个目录下的日志?这里需要把物理机要抓取日志的目录挂载到这里配置的这个目录

拉取 Promtail 的官方 Docker 镜像

docker pull grafana/promtail

如果docker一直拉不下来,请按这样操作:https://devpress.csdn.net/cloudnative/66d58f0f28d2c87ccbb2eaad.html

https://github.com/DaoCloud/public-image-mirror

启动 Promtail 容器

docker run -d \--name=promtail \-v /opt/promtail/data/promtail.yaml:/etc/promtail/promtail.yaml \-v /opt/promtail/data:/opt/promtail/data \-v /app/logs:/var/log \grafana/promtail \-config.file=/etc/promtail/promtail.yaml

查看 Promtail 容器启动日志

docker logs promtail


验证 Promtail 采集日志推向 Loki

docker 启动的时候,挂载的物理机日志目录是 /app/logs,我们在 /app/logs 目录下放一些以 .log为后缀的日志文件。然后查看 promtail 容器日志输出内容

/app/logs/app.log 文件

Promtail 容器日志输出

成功 !


Loki 整合 Grafana

Grafana 相关配置,请查看:https://blog.csdn.net/a1053765496/category_12770223.html

Grafana 配置 Loki 数据源

打开 Grafana Web 页面

进入 Connections  ->  Data sources  ->  Add data source 

Grafana 配置 Loki 面板

搜索指定的日志内容


Grafana 面板应用市场官网:https://grafana.com/grafana/dashboards

可以在应用市场搜索 Loki 相关面板

复制 id

复制 id 后 回到我们的 Grafana 页面

效果图,搜索指定日志内容

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从用户数据到区块链:Facebook如何利用去中心化技术
  • TDengine 签约前晨汽车,解锁智能出行的无限潜力
  • MySQL5.7基于mysqldump、xtrbackup、innobackupex工具进行全量备份/恢复、增量备份/恢复
  • Vue的学习(三)
  • DeepSeek缓存命中技术,成本降低10倍
  • ElementPlus表单验证报错 formEl.validate is not a function
  • 在线小说|基于java的小说阅读系统小程序(源码+数据库+文档)
  • Llama 3.1 大模型指令微调提升中文能力
  • 数据结构--双链表
  • 《C Primer Plus》第 2 章复习题和编程练习
  • 如何用静态住宅代理实现分布式代理网络
  • (学习总结16)C++模版2
  • 基于Python的B站热门视频可视化分析与挖掘系统
  • Ansible使用kubeadm方式一键安装k8s
  • 详解TCP的三次握手
  • 2017-08-04 前端日报
  • android 一些 utils
  • Apache的80端口被占用以及访问时报错403
  • C++类中的特殊成员函数
  • ES学习笔记(12)--Symbol
  • hadoop集群管理系统搭建规划说明
  • iOS编译提示和导航提示
  • js
  • js操作时间(持续更新)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • php面试题 汇集2
  • React-flux杂记
  • Solarized Scheme
  • Twitter赢在开放,三年创造奇迹
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 前端_面试
  • 深入浏览器事件循环的本质
  • 我的面试准备过程--容器(更新中)
  • 与 ConTeXt MkIV 官方文档的接驳
  • 怎么把视频里的音乐提取出来
  • ​ArcGIS Pro 如何批量删除字段
  • # C++之functional库用法整理
  • #1015 : KMP算法
  • #在 README.md 中生成项目目录结构
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (pojstep1.1.2)2654(直叙式模拟)
  • (笔记)M1使用hombrew安装qemu
  • (差分)胡桃爱原石
  • (二)JAVA使用POI操作excel
  • (一)Linux+Windows下安装ffmpeg
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 事件模型教程(二)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net6 webapi log4net完整配置使用流程
  • .Net的DataSet直接与SQL2005交互
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET下ASPX编程的几个小问题
  • [22]. 括号生成
  • [AIGC] SpringBoot的自动配置解析