基于 Loki+Promtail+Grafana 的 DolphinDB 轻量级日志监控管理实践

本文介绍在 DolphinDB 高可用集群中,基于 Loki、Promtail 与 Grafana 搭建轻量级日志采集、查询与告警的实践范围。

Source: https://dolphindb.cn/blogs/162

What this page covers

技能认证特训营第二期报名入口

页面顶部提供限时报名活动入口与福利提示。

基于 Loki+Promtail+Grafana 的 DolphinDB 轻量级日志监控管理实践(文章信息与导语)

包含文章标题、作者与日期,并说明日志监控体系搭建与告警实践覆盖范围。

日志监控方案概述:整体架构与组件说明

介绍 Promtail、Loki、Grafana 三组件的架构关系与数据流,并通过示例架构图进行说明。

Promtail 概述与配置要点

说明 Promtail 的定位、功能、数据源、服务发现与配置方式,并提供官方配置文档链接。

Promtail 配置文档参考:https://grafana.com/docs/loki/latest/send-data/promtail/configuration/

Loki 概述、版本与核心能力

说明 Loki 的设计理念、索引与存储方式、多租户与扩展性、LogQL 与告警组件等能力,并给出示例使用版本。

环境部署:服务器与软件版本

给出模拟服务器拓扑、各节点部署服务与端口,以及 Grafana/Loki/Promtail 软件版本信息与前置安装引用。

Loki 安装、部署、应用流程(前置建议)

在开始流程前,建议预先构建具有多数据节点的 DolphinDB 高可用集群,并提供参考文档入口。

安装与部署:Loki 服务端(单节点示例)

说明 Loki 与 Promtail 安装包位置、目录创建、Loki 配置文件关键参数,以及 Loki 的启动/停止与日志查看方式。

安装与部署:Promtail 客户端(DolphinDB 集群各节点)

给出 Promtail 部署目录、配置示例(采集 DolphinDB 日志与 core 文件监控)、启动/停止命令及多节点部署提示。

应用 Loki:Grafana 数据源接入与日志查询验证

指导在 Grafana 配置 Loki 数据源,并在 Explore 中使用标签浏览以验证日志查询。

应用 Loki:Grafana 告警规则与邮件通知配置(含验证)

给出基于 LogQL 的告警规则设置、无数据处理、SMTP 与通知策略配置,并通过写入 ERROR 日志验证邮件告警。

常见告警规则示例

提供多类基于 Loki/LogQL 的告警场景与查询语句/阈值参数示例,包括静默时段、丢包、连接失败、recovery 失败、无日志、登录失败、OOM、core 文件、停机、磁盘不足与心跳异常等。

常见问题解答(FAQ)

解答 Promtail 时间戳解析导致的 reject_old_samples 问题与参数调整,并说明 level 标签查询方式变化及最短评估期约束。

总结

重申该日志监控方案对 DolphinDB 高可用集群稳定性与异常定位的意义。

附录:参考链接与安装包/配置文件

列出相关教程链接与 Loki+Promtail 安装包及参考配置文件下载入口。

下载:https://docs.dolphindb.cn/zh/tutorials/script/best_practices_for_log_monitoring/lokipromtail.zip

参考:https://docs.dolphindb.cn/zh/tutorials/cluster_monitor.html#设置告警方式

参考:https://docs.dolphindb.cn/zh/tutorials/ha_cluster_deployment.html

参考:https://docs.dolphindb.cn/zh/tutorials/docker-compose_high_cluster.html

Facts index

Entity Attribute Value Confidence
文章发布日期2025-03-20high
作者署名署名momohigh
本文方案用途/场景为 DolphinDB 高可用集群提供基于 Loki、Promtail 与 Grafana 的轻量级日志监控体系实践,覆盖部署到告警流程,适用于金融、物联网等实时性要求高的场景medium
日志监控架构组件构成Promtail + Loki + Grafanahigh
Promtail定位/职责日志采集与推送代理:从数据源抓取日志,解析关键字为标签,通过 HTTP API 以流形式推送到 Lokihigh
Loki定位/职责主服务器:接收推送日志,存储日志并处理查询high
Grafana定位/职责提供日志可视化查询面板、实时监控和警报通知功能high
Promtail主要功能提取目标目录下日志;为日志流附加标签;将日志推送到 Loki 实例high
Promtail可获取日志的数据源本地日志文件与 systemd 日志(适用于 ARM 和 AMD64 架构机器)high
Promtail 服务发现机制限制受限于守护进程单节点本地部署模式,无法实现跨节点标签发现medium
Promtail分布式元数据标签获取方式可对接 Kubernetes API 获取元数据标签以完成目标定位medium
Promtail配置方式类似 Prometheus,使用配置段(stanza)进行配置high
Promtail 配置文档参考链接https://grafana.com/docs/loki/latest/send-data/promtail/configuration/high
Loki开发方/性质Grafana Labs 开发的开源日志聚合系统high
Loki索引策略不对日志内容进行全文索引,通过元数据标签实现快速查询(LogQL)high
Loki定位/特性更轻量级且与 Prometheus 紧密集成medium
Loki系统特性横向可扩展、高可用、多租户;以推送而非拉取方式收集日志high
Loki存储方式示例日志数据压缩成块存储在对象存储(如 Amazon S3 或 Google Cloud Storage),开发/PoC 阶段也可存储在文件系统high
Loki可扩展性描述可从树莓派小规模实例扩展到每天处理 PB 级数据;“简单可扩展模式”将读取与写入路径解耦以分别扩展;组件可按微服务运行并支持 Kubernetesmedium
Loki多租户机制支持多个租户共享同一实例,租户数据与请求隔离;通过在代理中分配租户 ID 配置high
Loki第三方集成许多第三方代理(客户端)通过插件支持 Lokimedium
Loki存储/成本描述索引只关注标签且占用空间更小;采用对象存储作为唯一数据存储方式;通过高压缩块与小索引降低运行成本medium
LogQL能力可用于生成日志查询,并支持从日志数据中生成指标high
Loki Ruler用途持续监控日志并根据结果执行告警;可与 Prometheus Alertmanager 或 Grafana 内置告警管理器集成high
本文示例Loki 版本2.5high
模拟服务器 vagrant1 (10.0.0.80)部署服务与端口Grafana(3000)、Loki(3100)、Promtail(9080)high
模拟服务器 vagrant2 (10.0.0.81)部署服务与端口Promtail(9080)high
模拟服务器 vagrant3 (10.0.0.82)部署服务与端口Promtail(9080)high
DolphinDB 节点端口(示例环境)端口8800、8801、8802、8803(controller/agent/datanode/computenode)high
软件版本Grafana 版本9.0.5high
软件版本Promtail 版本2.5high
前置条件Grafana 预先部署本教程需要在监控服务器提前部署 Grafanahigh
前置条件建议环境流程开始前建议预先构建具有多数据节点 DolphinDB 高可用集群high
Loki 安装包文件名(示例)文件名loki-linux-amd64.ziphigh
Promtail 安装包文件名(示例)文件名promtail-linux-amd64.ziphigh
Loki 安装位置(示例)目录/usr/local/logsCollect/lokihigh
Loki 数据与索引目录(示例)目录/data/loki 以及 /data/loki/{chunks,index}high
Loki 配置文件(示例)文件名config.yamlhigh
Loki 配置(示例)auth_enabledfalsehigh
Loki 配置(示例)server.http_listen_port3100high
Loki 配置(示例)ingester.lifecycler.address10.0.0.80high
Loki 配置(示例)ingester.lifecycler.ring.kvstore.storeinmemory(可选值:inmemory、consul、etcd)high
Loki 配置(示例)ingester.lifecycler.ring.replication_factor1high
Loki 配置(示例)ingester.chunk_idle_period5mhigh
Loki 配置(示例)ingester.chunk_retain_period30shigh
Loki schema_config(示例)configs.from2024-04-01high
Loki schema_config(示例)storeboltdb(常用值:boltdb、cassandra)high
Loki schema_config(示例)object_storefilesystem(常用值:filesystem、s3、gcs)high
Loki schema_config(示例)schemav11high
Loki schema_config(示例)index.prefixindex_high
Loki schema_config(示例)index.period168h(7天)high
Loki storage_config(示例)boltdb.directory/data/loki/indexhigh
Loki storage_config(示例)filesystem.directory/data/loki/chunkshigh
Loki limits_config(示例)reject_old_samplestruehigh
Loki limits_config(示例)reject_old_samples_max_age168h(7天)high
Loki limits_config(示例)ingestion_rate_mb1024(MB/s)high
Loki limits_config(示例)ingestion_burst_size_mb2048(MB)high
Loki chunk_store_config(示例)max_look_back_period168h(最大可查询历史 7 天,需为 schema_config.index.period 的倍数)high
Loki table_manager(示例)retention_deletes_enabledtruehigh
Loki table_manager(示例)retention_period168h(7天)high
Loki 默认上传速率限制默认限制说明默认有 4MB/s 的日志上传速率限制;教程额外配置全局速率限制以避免报错medium
Loki 启动命令(示例)命令nohup ./loki-linux-amd64 -config.file=./config.yaml >./server.log 2>&1 &high
Loki 停止命令(示例)命令kill -9 $(pgrep -f "loki-linux-amd64")high
Loki 日志查看命令(示例)命令tail -200f server.loghigh
Promtail 部署目录(示例)目录/usr/local/logsCollect/promtailhigh
Promtail 配置文件(示例)文件名promtail.yamlhigh
Promtail 配置(示例)server.http_listen_port9080high
Promtail 配置(示例)clients.urlhttp://10.0.0.80:3100/loki/api/v1/pushhigh
Promtail scrape job(示例)job_namedolphinDB(监控 DolphinDB 日志)high
Promtail scrape job(示例)日志路径 __path__/home/vagrant/v2.00.11.13/server/clusterDemo/log/*.loghigh
Promtail pipeline_stages(示例)regex expression^(?P<ts>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d+)\s(?P<level><\w+>)\s:(?P<message>.*)$high
Promtail pipeline_stages(示例)timestamp format & timezoneformat: 2006-01-02 15:04:05.000000;timezone: China/Beijinghigh
Promtail pipeline_stages(示例)labels提取 level 作为标签;output source 为 messagehigh
Promtail scrape job(示例)job_namecore_file_monitor(监控 core 宕机文件生成)high
Promtail core 文件监控(示例)__path__/home/vagrant/v2.00.11.13/server/clusterDemo/log/core.*high
Promtail core 文件监控(示例)limit 参数rate: 10;burst: 10;drop: truehigh
Promtail 启动命令(示例)命令nohup ./promtail-linux-amd64 -config.file=./promtail.yaml >./server.log 2>&1 &high
Promtail 停止命令(示例)命令kill -9 $(pgrep -f "promtail-linux-amd64")high
Grafana 默认端口端口3000high
Grafana 示例访问地址(教程环境)URL10.0.0.80:3000high
Grafana 默认登录凭据账号/密码admin / adminhigh
Grafana Loki 数据源配置Loki URL 示例http://10.0.0.80:3100high
Grafana Explore 日志浏览选择路径(示例)Explore → Loki → Log browser → dolphinDB → show logshigh
告警规则示例(ERROR 监控)检查频率与扫描窗口与评估期每 1 分钟检查 1 次;每次扫描过去 5 分钟;告警评估期 2 分钟high
告警规则示例(ERROR 监控)LogQL 表达式count_over_time({job="dolphinDB"} |= "ERROR"[5m])high
告警规则示例(ERROR 监控)条件表达式WHEN last() OF A IS ABOVE 0high
告警规则示例(ERROR 监控)NoData 处理将 Alert state if no data or all values are null 设置为 OKhigh
Grafana SMTP 配置文件路径(示例)路径./grafana-9.0.5/conf/defaults.inihigh
Grafana SMTP 配置(示例)enabledtruehigh
Grafana SMTP 配置(示例)hostsmtp.163.com:465high
Grafana SMTP 配置(示例)from_nameGrafanahigh
告警验证(DolphinDB)写入 ERROR 日志语句writeLogLevel(ERROR,"This is an ERROR message")high
静默时间(非交易时间段)示例Time range00:00-09:00 和 15:00-23:59high
静默时间(非交易时间段)示例适用范围周一至周五(monday:friday),每月 1:31,月份 1:12,年份 2025high
高频数据导入丢包监控判断依据(描述)通道内(ChannelNo)OrderIndex 与 TradeIndex 按顺序排列,若发生跳变可视为通道异常;可监控 SeqNo 变化判断丢包medium
insight 插件功能支持已支持逐笔数据的丢包监控日志输出;其他插件将在后续更新中提供该功能medium
丢包监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |= "wrong applseqnum" [5m])high
丢包监控告警参数(示例)Evaluate every / ForEvaluate every:10s;For:20shigh
客户端连接失败监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |~ "(?i)failed to connect" [5m])high
客户端连接失败监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 5;Evaluate every:30s;For:1mhigh
recovery 失败监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |~ "(?i)failed to incrementally recover chunk"[1m])high
recovery 失败监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 10;Evaluate every:15s;For:30shigh
日志长时间不生成监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"}[10m])high
日志长时间不生成监控告警参数(示例)阈值与频率Condition: When last() OF A IS BELOW 1;Evaluate every:1m;For:2mhigh
用户登录失败监控 LogQL(示例)查询语句sum by (remoteIP) (count_over_time({job="dolphinDB"} |~ "failed.*The user name or password is incorrect" | logfmt | remoteIP!="" [1h]))high
用户登录失败监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 10;Evaluate every:1m;For:2m(查询时间需覆盖 now-1h to now)high
Out of memory 监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |= "Out of memory" [5m])high
Out of memory 监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 2;Evaluate every:1m;For:2mhigh
core 文件生成监控 LogQL(示例)查询语句count_over_time({job="core_files"}[5m])high
core 文件生成监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 0;Evaluate every:1m;For:2mhigh
节点停机监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |= "MainServer shutdown." [5m])high
节点停机监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 0;Evaluate every:15s;For:30shigh
磁盘空间不足监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |~ "(?i)No space left on device" [5m])high
磁盘空间不足监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 0;Evaluate every:1m;For:2mhigh
节点频繁上下线/网络波动监控 LogQL(示例)查询语句count_over_time({job="dolphinDB"} |~ "(?i)HeartBeatSender exception" [3m])high
节点频繁上下线/网络波动监控告警参数(示例)阈值与频率Condition: When last() OF A IS ABOVE 10;Evaluate every:15s;For:30shigh
Promtail 时间戳未解析时的时间戳规则行为若 Promtail 未解析日志时间戳,Loki 使用推送到 Loki 的时间作为日志条目新时间戳high
Promtail 解析时间戳后的常见错误错误信息可能报错 “timestamp too old”high
timestamp too old 的原因(教程解释)原因解析使用日志原有时间戳后,若旧日志时间戳超出 Loki 可接收范围(reject_old_samples_max_age),则返回 400 导致发送失败medium
Loki limits_config(FAQ 调整示例)reject_old_samples_max_age1680h(将可接受最旧日志时间戳调大)high
level 字段解析后的 LogQL 查询方式变更说明原 `count_over_time({job="dolphinDB"} |= "ERROR"[5m])` 应改为 `count_over_time({job="dolphinDB", level="ERROR"}[5m])`high
最短告警评估期参数(FAQ 示例)最小值Evaluate every:10s;For:20shigh
告警参数约束约束条件For 的参数值不能低于 Evaluate every 的两倍(示例:每 1m 检查,则评估期至少 2m)high
活动报名链接URLhttps://www.qingsuyun.com/h5/e/217471/5/high
附录安装包及参考配置文件下载链接https://docs.dolphindb.cn/zh/tutorials/script/best_practices_for_log_monitoring/lokipromtail.ziphigh
参考链接:集群运维监控URLhttps://docs.dolphindb.cn/zh/tutorials/cluster_monitor.html#%E8%AE%BE%E7%BD%AE%E5%91%8A%E8%AD%A6%E6%96%B9%E5%BC%8Fhigh
参考链接:高可用集群部署与升级URLhttps://docs.dolphindb.cn/zh/tutorials/ha_cluster_deployment.htmlhigh
参考链接:基于 Docker-Compose 部署 DolphinDBURLhttps://docs.dolphindb.cn/zh/tutorials/docker-compose_high_cluster.htmlhigh