Logtail 心跳监控最佳实践

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 作为采集 agent,logtail 所采集的日志可能会就被用于对应用程序进行监控/告警,所以保证它自身处于正常状态对整个系统的稳定显得尤为重要。在之前的[《全方位 Logtail 状态监控》](https://yq.aliyun.com/articles/691336)中,我们曾介绍了关于监控 Logtail 各类状态的方法,包括基本的链路状态、资源使用情况等。

作为采集 agent,logtail 所采集的日志可能会就被用于对应用程序进行监控/告警,所以保证它自身处于正常状态对整个系统的稳定显得尤为重要。在之前的《全方位 Logtail 状态监控》中,我们曾介绍了关于监控 Logtail 各类状态的方法,包括基本的链路状态、资源使用情况等。

在本文中,我们将详细展开通过外围巡检获取 SLS 提供的状态信息来实现对 logtail 心跳状态的监控和告警,并提供可供直接使用的代码。

外围巡检

顾名思义,外围巡检即不访问实际运行 logtail 的机器,仅通过一些外部访问可获得的状态信息来进行巡检。因为是巡检,自然会受到监控规模的限制,因此,此方法适用于 logtail 实例数量较少(比如少于 500 台)或是对发现异常的实时性要求较低(比如半小时内发现)的场景。

SLS 提供的状态信息

在实践中,我们可以通过以下两项 SLS 提供的信息来进行巡检:

  1. ListMachines API:在日志服务中,正在采集日志的 logtail 实例在逻辑上会属于至少一个机器组,因此,通过此 API 查询指定机器组,即可得到该组内 logtail 实例在 SLS 服务端的状态,辅助我们进行巡检判断。
  2. 服务日志中的 logtail 状态日志:在正常情况下,logtail 会在每分钟上报一条状态日志至 SLS 服务端,通过开通服务日志(不开通操作日志的情况下完全免费),我们即可获取到这些状态日志,进而判断 logtail 实例的状态日志上报是否依旧正常。

巡检流程

假定监控对象为单个 project,实时性要求为 15 分钟,我们推荐按照如下流程来组合上述的两项信息以实现外围巡检:

  1. 对于 project 下的每个机器组,调用 ListMachines API 来获取该机器组内所有机器的状态,其中有个 lastHeartbeatTime 表示对应机器上 logtail 实例在服务端的最近心跳时间。通过对比当前时间,配合上特定阈值(比如 10 分钟),即可筛选出潜在的异常机器(现阶段,ListMachines 返回的心跳时间可能会有延时,因此只是潜在机器)。
    2.借助 logtail 状态日志来做进一步地确认。因为服务日志也存储在 SLS 的 logstore 中,所以可以通过 API 在对应 logstore 中查询相关内容,根据结果来进行确认。比如使用如下语句来查询特定 logtail 实例最近 10 分钟内的状态日志数量,如果少于 8 条,认为它是异常。
# 单个查询
__topic__: logtail_status and ip: "192.168.1.1" | select count(*) as c

# 为了提高效率,可以批量查询多个 IP(不超过 25 个)
__topic__: logtail_status and (ip:"192.168.1.1" or ip:"192.168.1.2") | select ip, count(*) as c group by ip

巡检结果告警

在通过巡检得到异常结果后,我们可以直接将此信息写入到特定 logstore,然后利用 SLS 的告警功能来进行通知。目前,告警功能支持短信、邮件、钉钉、WebHook 等多种通知方式。

实践示例

代码及其使用方法

巡检脚本的代码已托管至 Github,欢迎 PR。脚本的使用方式如下:

  1. 选择周期性运行的环境:任意可访问 SLS 服务端的机器或是托管到相同区域内的函数计算服务。
  2. 配置 heartbeat_monitor.py 脚本中的参数,主要是以下参数:

    • project_name: 需要监控的 SLS 项目,默认为监控该 project 下的所有机器组;
    • endpoint:SLS 项目对应的 endpoint,比如 cn-hangzhou.log.aliyuncs.com;
    • logtail_status_project_name:SLS 项目的服务日志的存放位置,一般为 log-service--<区域名>,比如 log-service-123232323-cn-hangzhou;
    • report_logstore:用于上报巡检异常结果的 logstore(默认为相同 project),需手动创建,如未指定,异常信息仅会输出在本地。
  3. 配置周期执行该脚本,比如在机器上创建一个 crontab 任务,每 5 分钟执行一次。
# 假设脚本部署在 HOME 目录下
(crontab -l 2>/dev/null; echo "*/5 * * * * python ~/heartbeat_monitor.py > ~/heartbeat_monitor.log") | crontab -

告警配置

因为只有在发生异常的时候,巡检脚本才会向 report_logstore 中写入异常信息,所以我们可以直接监控该 logstore 中是否有日志,有的话就进行告警。

查询语句如下:

* | select count(*) as c

告警配置(每 3 分钟执行一次):

可根据需要配置合适的告警通知方式,如下为钉钉机器人告警的示例:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
3月前
|
运维 Prometheus 监控
StarRocks 监控报警配置指南
StarRocks 监控报警配置指南
|
12月前
|
存储 弹性计算 监控
Logtail心跳问题排查手册(主机场景)
机器组有心跳是Logtail正常运行的重要基础,然而,机器组无心跳却是Logtail使用过程中非常常见的问题。事实上,这一类问题的排查有一套非常系统的流程,绝大多数问题均可在这个排查过程中得以解决。因此,本文将重点介绍如何系统排查主机场景下的机器组无心跳问题。
205 0
|
Prometheus Kubernetes 监控
最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断
本文介绍了 CoreDNS 服务器、客户端侧的常见 DNS 异常、故障根因,异常观测方案和故障处理流程,希望对大家的问题诊断有所帮助。DNS 服务对于 Kubernetes 集群是至关重要的,除了观测异常之外,我们在架构设计之初就应充分考虑 DNS 服务的稳定性,采纳一些例如 DNS 本地缓存之类的最佳实践。
最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断
|
数据采集 运维 监控
本地机器安装Logtail接入到阿里云SLS日志服务
本地机器安装Logtail接入到阿里云SLS日志服务
1176 0
本地机器安装Logtail接入到阿里云SLS日志服务
|
JSON 运维 Kubernetes
K8s场景下Logtail组件可观测方案升级-Logtail事件监控发布
SLS针对Logtail本身以及Logtail的管控组件alibaba-log-controller,采用K8s事件的方式,将处理流程中的关键事件透出,从而让用户能够更清楚的感知其中发生的异常。
489 0
K8s场景下Logtail组件可观测方案升级-Logtail事件监控发布
|
SQL 存储 数据采集
用户指南—监控与告警—计算资源监控
为方便您掌握实例的运行状态,PolarDB-X提供监控查询功能。您可以在控制台上查看计算资源监控和存储资源监控信息。其中计算资源监控展示了实例计算层资源的性能数据,本文将介绍如何查看计算资源监控信息。
110 0
用户指南—监控与告警—计算资源监控
EMQ
|
SQL JSON Prometheus
使用 Prometheus 监控 eKuiper 规则运行状态
本文介绍了eKuiper中的规则状态指标以及如何使用Prometheus监控这些状态指标,用户可以基于此进一步探索Prometheus的更多高级功能,更好地实现eKuiper的运维。
EMQ
147 0
|
存储 数据采集 监控
用户指南—监控与告警—存储资源监控
为方便您掌握实例的运行状态,PolarDB-X提供监控查询功能。您可以在控制台上查看计算资源监控和存储资源监控信息。其中存储资源监控展示了实例存储层资源的性能数据,本文将介绍如何查看存储资源监控信息。
用户指南—监控与告警—存储资源监控
|
机器学习/深度学习 监控 物联网
DataDog告警数据还能这么用-接入SLS开放告警
DataDog是一个用于云上应用的监控和分析平台,可以自动采集和分析日志、指标和链路追踪等数据,还可以用于基础设施和云服务的事件监控,对于服务器、应用程序以及采集到的各种数据提供了很好的可观测效果。但是DadaDog对于告警通知的管理功能比较缺乏,例如不支持短信、语音等通知渠道,也不支持用户组和值班组管理,还不具备动态发送告警通知的功能,因此不能覆盖用户的部分使用场景。SLS的告警功能很好地弥补了DataDog的这些不足之处,通过SLS提供的开放告警功能,用户也可以将DataDog的告警消息接入到SLS进行统一管理。本文将介绍如何快速创建DataDog的告警并将其告警消息接入到SLS中。
913 0