SLS告警通知到Line

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Line是一款由NHN Japan(韩国Naver Corporation公司的子公司)在日本推出的即时通信软件,在日韩拥有较大的用户规模。Line支持构建机器人,并且通过API给机器人推送消息,添加了机器人的用户以及群聊就可以接收到机器人推送的消息。但是由于Line的服务器位于海外,SLS的告警无法直接发送通知。因此本文介绍了如何利用阿里云的其他服务来将SLS的告警通知到Line。

日志服务告警是SLS提供的一站式告警监控、降噪、事务管理、通知分派的智能运维平台,能够完美地支持开发运维、IT运维、安全运维、智能运维以及商务运维等场景下监控告警的需求。SLS的告警包含了语音、短信、邮件、钉钉、通用Webhook以及函数计算等通知渠道。

背景

Line是一款由NHN Japan(韩国Naver Corporation公司的子公司在日本推出的即时通信软件,在日韩拥有较大的用户规模。Line支持构建机器人,并且通过API给机器人推送消息,添加了机器人的用户以及群聊就可以接收到机器人推送的消息。但是由于Line的服务器位于海外,SLS的告警无法直接发送通知。

对于这样的需求,用户往往需要自己提供一个Webhook服务,一方面这个服务可以对于告警消息进行二次加工处理,另一方面这个服务也可以转发SLS发送的请求。阿里云的FC(函数计算)服务可以很好地满足上述场景,用户可以在海外区域创建FC函数,在函数中进行简单地开发就可以完成上述需求。

FC可以拓展SLS支持的通用Webhook通知渠道的一些能力,包括以下两点:

  • 对告警通知内容定制化强烈,有较为复杂的加工处理需求
  • 海外网络不通,SLS无法直接发送告警通知到海外的一些webhook服务

操作步骤

1.在Line开发者平台构建机器人

Line有两种自定义的通知方式,一种是Line Notify(官方的一个通知服务),一种是自定义机器人。下面分别说明这两种方式的设置步骤。

  • Line Notify

登录Line Notify配置平台,点击Generate token。填写服务名称后生成访问Token,复制并保存好Token。

  • Line自定义机器人

具体可以参考构建Line机器人。构建好了以后,生成一个Channel access token,建议设置成长期有效。然后将机器人添加为某个用户的好友或者加入某个群聊。

2.创建FC函数

在函数计算控制台创建函数,参考创建函数,注意选择海外的区域。在创建函数的过程中,函数的名称必须以sls-ops开头,具体可以参考告警通知渠道,请求处理程序类型选择处理事件请求。该函数只是将SLS的通知转发到海外的Line的服务器,示例代码如下。如果是Line Notify这种通知形式,那么转发通知的目标服务器地址为https://notify-api.line.me/api/notify。另外,代码中的token需要替换为创建Line机器人时获取到的token。

# -*- coding: utf-8 -*-importloggingimportrequests# url = 'https://notify-api.line.me/api/notify'url='https://api.line.me/v2/bot/message/broadcast'token='Your token'headers= {'Content-Type' : 'application/x-www-form-urlencoded', 'Authorization' : 'Bearer '+token}
defhandler(event, context):
resp=requests.post(url, headers=headers, data= {'message': event})
logger=logging.getLogger()
ifresp.status_code==200:
logger.info('Send message successfully: '+resp.text )
else:
logger.error('Failed to send message: '+resp.text)
return

3.创建内容模板

在SLS告警中心添加一个内容模板,渠道选择函数计算,发送方式选择逐条发送

内容模板需要设置为Line接受的固定格式,其中使用到的模板函数可以参考内置模板函数。Line的两种通知方式对应的内容模板分别如下。

  • Line Notify

Line Notify是通过官方的一个通知服务发送的消息,对于消息的长度限制为1000个字符,效果如下所示:

对应的内容模板如下:

Project: {{ alert.project }}
Alert Name: {{ alert.alert_name }}
Fire Time: {{ alert.fire_time | format_date }}
Alert Time: {{ alert.alert_time | format_date }}
Status: {{ alert.status | format_status }}
Severity : {{ alert.severity | format_severity }}
Labels:
{{ alert.labels | to_list | blockquote }}
{% if alert.dashboard_url -%}
Dashboard: {{ alert.dashboard_url }}
{% endif -%}
{% if alert.query_url -%}
Query Detail: {{ alert.query_url }}
{% endif -%}
  • Line机器人

Line机器人的消息类型有多种,适用于告警通知的有两种类型,这两种类型对应的内容模板分别如下。

  • Text message

这种消息类型是将所有的数据当成一个字符串发送给Line用户,效果如下图所示:

对应的内容模板如下:

{
"messages": [
        {
"text": {{ quote("Project: "+alert.project+"\n"+"Alert Name: "+alert.alert_name+"\n"+"Fire Time: "+format_date(alert.fire_time, tz="UTC") +"\n"+"Alert Time: "+format_date(alert.alert_time, tz="UTC")+"\n"+"Status: "+alert.status+"\n"+"Severity: "+string(alert.severity) +"\n"+"Labels: "+string(alert.labels) +"\n"+"Query Url: "+alert.query_url) }},
"type": "text"        }
    ]
}
  • Template messages

这种消息类型是支持预定义的布局,效果如下图所示。由于告警通知中常包含查询链接、免登链接等 URL,所以使用这种消息格式时可以将链接隐藏在按钮后面,但是这种类型的消息对文本长度限制为160个字符。

对应的内容模板如下:

{
"messages": [
        {
"type": "template",
"altText": "SLS Alert",
"template": {
"type": "buttons",
"text":  {{ quote( truncate("Project: "+alert.project+"\n"+"Alert Name: "+alert.alert_name+"\n"+"Fire Time: "+format_date(alert.fire_time, tz="UTC") +"\n"+"Alert Time: "+format_date(alert.alert_time, tz="UTC")+"\n"+"Status: "+alert.status+"\n"+"Severity: "+string(alert.severity) +"\n"+"Labels: "+string(alert.labels), 160)) }}, 
"actions": [
                    {
"type": "uri",
"label": "View detail",
"uri": {{alert.query_url|quote}}
                    }
                ]
            }
        }
    ]
}

4.创建并使用行动策略

创建好了内容模板后,新创建一个行动策略(可以参考创建行动策略),选择第2步创建好的FC函数,内容模板选择第3步创建好的,然后再目标告警种应用创建好的行动策略。告警触发后就可以在Line客户端接受到SLS的告警消息。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
消息中间件 存储 运维
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
|
5天前
|
JSON Prometheus Cloud Native
Grafana 系列 -Loki- 基于日志实现告警
Grafana 系列 -Loki- 基于日志实现告警
|
8月前
|
Web App开发 存储 监控
日志服务之告警接入与管理
本教程介绍如何使用日志服务接入NGINX模拟数据,并配置告警规则来对NGINX访问错误进行监控。
339 0
|
6月前
|
监控 数据库
136 日志监控告警系统案例(代码实现)
136 日志监控告警系统案例(代码实现)
83 0
|
6月前
|
监控
135 日志监控告警系统案例(数据模型设计)
135 日志监控告警系统案例(数据模型设计)
86 0
|
6月前
|
消息中间件 监控 关系型数据库
134 日志监控告警系统案例(功能架构分析)
134 日志监控告警系统案例(功能架构分析)
81 0
|
6月前
|
分布式计算 监控 前端开发
133 日志监控告警系统案例(需求分析)
133 日志监控告警系统案例(需求分析)
58 0
|
Oracle 关系型数据库
Oracle自带adrci工具清理告警日志
Oracle自带adrci工具清理告警日志
526 0
Oracle自带adrci工具清理告警日志
|
SQL 监控 关系型数据库
【python小脚本】监听日志文件异常数据发送告警短信
老项目中有个用脚本启动的服务,很重要,用来做业务留痕的,涉及业务客户经常性投诉,是找第三方做的,时间长了维护需要花钱,老出各种未知bug,没办法处理所以机器上配了定时任务,定期的几天重启一次来解决。 但是有时候不知道什么原因,重启脚本运行,服务没起来,crond 也没有什么调度机制。 希望写个脚本做监控,当发现服务没起来,发送告警信息,或者重启服务。
145 0
|
监控
限制SLS告警通知时段的几种常见方法
在对系统进行监控告警的过程中,有时候并非在任何时候都要接收告警通知,本文会介绍几种常见的限制告警通知时段的方法,以及它们各自所适用的场景。
354 0
限制SLS告警通知时段的几种常见方法

相关产品

  • 日志服务