Giter VIP home page Giter VIP logo

timonwong / prometheus-webhook-dingtalk Goto Github PK

View Code? Open in Web Editor NEW
898.0 25.0 309.0 18.76 MB

DingTalk integration for Prometheus Alertmanager

Home Page: http://theo.im/blog/2017/10/16/release-prometheus-alertmanager-webhook-for-dingtalk/

License: Apache License 2.0

Makefile 2.60% Go 61.94% Dockerfile 1.48% Shell 0.40% HTML 2.05% TypeScript 29.73% CSS 1.81%
prometheus dingding dingtalk alertmanager

prometheus-webhook-dingtalk's Introduction

prometheus-webhook-dingtalk

Build Status Go Report Card Docker Pulls

Generating DingTalk notification from Prometheus AlertManager WebHooks.

Install

Precompiled binaries

Precompiled binaries for released versions are available in release page: It's always recommended to use latest stable version available.

Docker

You can deploy this tool using the Docker image from following registry:

Building from Source

Prerequisites

  1. Go (1.17 or greater is required)
  2. Nodejs

Build

Clone the repository and build manually:

make build

Building the Docker Image

In order to build the docker image locally (linux/amd64), you can use the following commands:

make promu
promu crossbuild -p linux/amd64   #  Or $(go env GOPATH)/bin/promu crossbuild -p linux/amd64
make common-docker-amd64

Usage

usage: prometheus-webhook-dingtalk [<flags>]

Flags:
  -h, --help                    Show context-sensitive help (also try --help-long and --help-man).
      --web.listen-address=:8060
                                The address to listen on for web interface.
      --web.enable-ui           Enable Web UI mounted on /ui path
      --web.enable-lifecycle    Enable reload via HTTP request.
      --config.file=config.yml  Path to the configuration file.
      --log.level=info          Only log messages with the given severity or above. One of: [debug, info, warn, error]
      --log.format=logfmt       Output format of log messages. One of: [logfmt, json]
      --version                 Show application version.

For Kubernetes users, check out ./contrib/k8s.

Configuration

常见问题可以看看 FAQ

## Request timeout
# timeout: 5s

## Customizable templates path
# templates:
#   - contrib/templates/legacy/template.tmpl

## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
# default_message:
#   title: '{{ template "legacy.title" . }}'
#   text: '{{ template "legacy.content" . }}'

## Targets, previously was known as "profiles"
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    # secret for signature
    secret: SEC000000000000000000000
  webhook2:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
  webhook_legacy:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    # Customize template content
    message:
      # Use legacy template
      title: '{{ template "legacy.title" . }}'
      text: '{{ template "legacy.content" . }}'
  webhook_mention_all:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    mention:
      all: true
  webhook_mention_users:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    mention:
      mobiles: ['156xxxx8827', '189xxxx8325']

prometheus-webhook-dingtalk's People

Contributors

dependabot[bot] avatar desistdaydream avatar russellgao avatar timonwong avatar wi1dcard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

prometheus-webhook-dingtalk's Issues

还是模板问题

首先感谢您分享webhook-dingtalk

我把加载模板已经成功加载自定义模板了 可是发现还是没有用自定义的 还是走的封装到代码里的default.tmpl啊

image

IOS 版本 dingtalk 接收 告警信息内容空白

目前已经顺利部署该项目,使用项目中example里面shell脚本可以正常收到告警信息。
但是由alert manager 发送告警信息,电脑版dingtalk和安卓端 都可以正常收到告警信息。
而IOS版本收到信息为空白。

Resolved

Resolved的模板一直没找到在哪里改。。。

返回 404

prometheus-webhook-dingtalk 报错如下
evel=info ts=2018-05-14T05:46:51.050254532Z caller=entry.go:22 http_scheme=http http_proto=HTTP/1.1 http_method=POST remote_addr=127.0.0.1:41260 user_agent=Alertmanager/0.14.0 uri=http://localhost:8060/dingtalk/webhook1/send resp_status=404 resp_bytes_length=19 resp_elasped_ms=0.078093 msg="request complete"

请问这是怎么回事

关于模板中链接的问题

您好,我使用了默认模板,发现标题的链接不是我想要的,能否将详情的超链接做成 title_link 这种形式?而且 source 中的超链接访问模式是http,正确的模式应该是 https,请问这个应该如何修改

error decoding response from DingTalk: invalid character '<' looking for beginning of value

level=info ts=2018-12-29T02:12:46.419714885Z caller=entry.go:22 http_scheme=http http_proto=HTTP/1.1 http_method=POST remote_addr=172.17.0.1:41158 user_agent=Alertmanager/0.15.2 uri=http://10.1.48.28:8060/dingtalk/DBK/send resp_status=400 resp_bytes_length=12 resp_elasped_ms=195.996089 msg="request complete"

上面是一条完整的日志,请问这个是什么原因导致的,可以解决吗? 每天会有无数条这样的error,好像alertmanager在一直重试,频率非常快。

模板告警恢复问题

您好请问下告警恢复这个模板怎么写?
{{ define "__text_alert_list" }}{{ range . }}
{{ range .Annotations.SortedPairs }}> - {{ .Value | markdown | html }}
{{ end }}
{{ end }}{{ end }}
我配置告警恢复还是引用这一段内容,但是告警恢复的时候值是错的,仍然是之前告警值而不是最新恢复值。
想问下这个恢复这段改怎么写或者怎么引用?

为啥提示找不到模板?

大佬,我用你的Dockerfile,拷贝了一份新的模板到默认路径替换了default.tmpl

pod日志

然后我修改了webhook-dingtalk.yml运行时的arg参数,原来是没有template.file这一项的,加了后提示找不到这个文件

[root@kube-master-237 system]# kubectl logs -n monitoring webhook-dingtalk-c74bbbff4-wz2pm 
level=info ts=2019-07-04T01:21:50.392206461Z caller=main.go:37 msg="Starting prometheus-webhook-dingtalk" version=
level=error ts=2019-07-04T01:21:50.392355553Z caller=main.go:45 filename="\"/usr/share/prometheus-webhook-dingtalksr/share/prometheus-webhook-dingtalk/template/default.tmpl\": no such file or directory"

pod 模板文件

但是我回退deployment后进入pod查看这个文件是存在的,并且已经修改成功了,权限位也没问题呀 可读啊

/ # ls -l /usr/share/prometheus-webhook-dingtalk/template/default.tmpl 
-rw-r--r--    1 root     root           978 Jul  3 13:36 /usr/share/prometheus-webhook-dingtalk/template/default.tmpl

webhook-dingtalk deployment

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: dingtalk
  name: webhook-dingtalk
  namespace: monitoring
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: dingtalk
    spec:
      containers:
      - name: dingtalk
#        image: timonwong/prometheus-webhook-dingtalk:v0.3.0
        image: sanger/prometheus-webhook-dingtalk:v0.0.1
        imagePullPolicy: IfNotPresent
        # 设置钉钉群聊自定义机器人后,使用实际 access_token 替换下面 xxxxxx部分
        args:
          - --template.file="/usr/share/prometheus-webhook-dingtalk/template/default.tmpl"          
          - --ding.profile=webhook1=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxx
        ports:
        - containerPort: 8060
          protocol: TCP

请问代码里面可以对告警时间做格式化处理吗?

作者你好,我想对告警时显示时间格式为(yyyy-mm-dd HH:mm:ss) 但是我没有查找到template这样的设置。 另外恢复时怎么计算告警持续的时间? 我想在模板里面做下数学运算,但是没找是否可以这样做。
这个是我把时间换成时间戳{{ .EndsAt.Unix }} - {{ .StartsAt.Unix }} ,不过不晓得咋运算。
作者可以添加这两个小更能否? (wo不懂go)

kubernetes 下无法使用svc访问接口

  • curl -XPOST '-d{
    "receiver": "admins",
    "status": "firing",
    "alerts": [
    {
    "status": "firing",
    "labels": {
    "alertname": "something_happend",
    "env": "prod",
    "instance": "server01.int:9100",
    "job": "node",
    "service": "prometheus_bot",
    "severity": "warning",
    "supervisor": "runit"
    },
    "annotations": {
    "summary": "Oops, something happend!"
    },
    "startsAt": "2016-04-27T20:46:37.903Z",
    "endsAt": "0001-01-01T00:00:00Z",
    "generatorURL": "https://example.com/graph#..."
    }
    ],
    "groupLabels": {
    "alertname": "something_happend",
    "instance": "server01.int:9100"
    },
    "commonLabels": {
    "alertname": "something_happend",
    "env": "prod",
    "instance": "server01.int:9100",
    "job": "node",
    "service": "prometheus_bot",
    "severity": "warning",
    "supervisor": "runit"
    },
    "commonAnnotations": {
    "summary": "runit service prometheus_bot restarted, server01.int:9100"
    },
    "externalURL": "https://alert-manager.example.com",
    "version": "3"
    }' http://prometheus-webhook-dingtalk:30595/dingtalk/webhook1/send
    404 page not found

msg="target not found"

version:1.4.0

报错:

level=warn ts=2020-03-18T03:01:29.787Z caller=dingtalk.go:75 component=web target=webhook1 msg="target not found"

config.yml配置:

timeout: 5s

templates:

  • contrib/templates/legacy/template.tmpl

default_message:
title: '{{ template "legacy.title" . }}'
text: '{{ template "legacy.content" . }}'

targets:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=

command failed: build -o /usr/local/src/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk -ldflags

linux-node1.example.com<2019-11-04 16:08:27> /usr/local/src/prometheus-webhook-dingtalk
root># make

formatting code
building binaries
prometheus-webhook-dingtalk
can't load package: package github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk: cannot find package "github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk" in any of:
/usr/local/go/src/github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk (from $GOROOT)
/root/go/src/github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk (from $GOPATH)
!! command failed: build -o /usr/local/src/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk -ldflags -s -X github.com/timonwong/prometheus-webhook-dingtalk/vendor/github.com/prometheus/common/version.Version=0.3.0 -X github.com/timonwong/prometheus-webhook-dingtalk/vendor/github.com/prometheus/common/version.Revision=30856de7911d4de86e698cc32e31c08f93deb23a -X github.com/timonwong/prometheus-webhook-dingtalk/vendor/github.com/prometheus/common/version.Branch=master -X github.com/timonwong/prometheus-webhook-dingtalk/vendor/github.com/prometheus/common/version.BuildUser=[email protected] -X github.com/timonwong/prometheus-webhook-dingtalk/vendor/github.com/prometheus/common/version.BuildDate=20191104-08:08:42 -extldflags '-static' -a -tags 'netgo static_build' github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk: exit status 1
make: *** [build] Error 1

template 不生效

昨天改的模板本来已经生效了,莫名又不好使了
image
很奇怪,本来好好的

修改了template.tmpl
并在config.yml里指定了templates
好像还必须添加
message:
title: '{{ template "legacy.title" . }}'
text: '{{ template "legacy.content" . }}'
否则用的还是默认的模板
但是现在报错了

make error

can't load package: package github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk: cannot find package "github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk" in any of:
/usr/local/Cellar/go/1.10.2/libexec/src/github.com/timonwong/prometheus-webhook-dingtalk/cmd/prometheus-webhook-dingtalk (from $GOROOT)

unable to send alerts

I have compiled the binary and passed the dingtalk url using flags. but how to i make alertmanager make connection with this to send alerts to ding group.

关于模版中GeneratorURL的定义

项目中目前模版发送出来的告警,其中source中的链接是k8s svc的名称,我需要修改成ingress的外网域名。请问大佬如何修改。
`[FIRING:1] something_happend server01.int:9100 (prod node prometheus_bot warning runit)

[FIRING:1] something_happend

Labels

  • alertname: something_happend
  • env: prod
  • instance: server01.int:9100
  • job: node
  • service: prometheus_bot
  • severity: warning
  • supervisor: runit

Annotations

  • summary: Oops, something happend!

Source: ["Link"]**(https://example.com/graph#...)**`

如何配置将信息精简

首先感谢分享,现在已经用docker部署好了环境并且可以正常发送钉钉消息,但是钉钉消息罗列在一起显得非常臃肿,请问怎么能够配置提供简单提示的标题,详细内容可通过点击进入后查看。我想定制化发送信息的方式的话怎么去配置修改呢?重写template.file?

Code422是什么状态?

dingtalk已经配置很多项目了,今天配置新项目的时候,总是报
Failed to send notification to DingTalk respCode=300001 respMsg="message param text is null"
http_scheme=http_proto=HTTP/1.1 http_method=PST remote_addr=[::1]:40784 user_agent=Alertmanager/0.15.3 uri=http://localhost:8141/dingtalk/ops_dingding/send resp_status=422 resp_bytes_length=27 resesp_elasped_ms=58.143594 msg="request complete"

alertmanger里也有相关状态422的报错,请问这个422是什么问题?

Error- Message is too long

dingtalk[30084]: level=error ts=2019-03-29T06:16:58.807601502Z caller=dingtalk.go:59 msg="Failed to send notification to DingTalk" respCode=101002 respMsg="message is too long"

支持多模板?

目前看了一下,发觉只可以支持一个模板,请问一下,能不能根据profile级别,对应的定义自己的模板。

因为往往不同的钉钉群,就是不同的业务组,他们可能关注的模板是不一样的。。

所以最好有这样的模板

钉钉报警alertname无法显示

更改default.tmpl的一段
{{ define "default.content" }}#### [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] **{{ index .groupLabels "alertname" }}**为
{{ define "default.content" }}#### [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ index .commonLabels "alertname" }}
后报错
msg="Failed to build notification" err="template: default.tmpl:24:138: executing "default.content" at <.commonLabels>: can't evaluate field commonLabels in type *models.WebhookMessage"

可是我看了接收到的json数据后半段是
}],
"groupLabels": {},
"commonLabels": {
"alertname": "Pod的CPU使用率大于65%",
"namespace": "ai",
"prometheus": "monitoring/ack-prometheus-operator-prometheus",
"severity": "critical"
},
"commonAnnotations": {},
"externalURL": "http://ack-prometheus-operator-alertmanager.monitoring:9093",
"version": "4",
"groupKey": "{}/{severity=~"^(?:critical)$"}:{}"
}
groupLabels的值为空字典,请问这怎么做

docker image the code dir is empty

$ docker exec -ti prometheus-webhook-dingtalk /bin/sh
/prometheus-webhook-dingtalk $ ls
/prometheus-webhook-dingtalk $ ls -al
total 0
drwxr-xr-x 2 nobody nogroup 6 Dec 9 01:16 .
drwxr-xr-x 1 root root 109 Dec 9 09:09 ..
/prometheus-webhook-dingtalk $ ls -al
total 0
drwxr-xr-x 2 nobody nogroup 6 Dec 9 01:16 .
drwxr-xr-x 1 root root 109 Dec 9 09:09 ..
/prometheus-webhook-dingtalk $

模板

1c3c69b539c1cb1043bb33617c18871

定义好的summary在钉钉报警的时候显示为[]
18d910ca7790b54bd9d9b3ee1bab126
希望大神能把模板的使用方法,能写在文档中。go小白有点不太会用,

手机钉钉显示的比 pc钉钉显示少

image
image

我的 template文件如下:
Labels
{{ range .Labels.SortedPairs }}
{{ if eq .Name "alertname" }}> [报警名称]: {{ .Value | markdown | html }}{{ end }}
{{ if eq .Name "instance" }}> [主机]: {{ .Value | markdown | html }}{{ end }}
{{ if eq .Name "device" }}> [网卡名]: {{ .Value | markdown | html }}{{ end }}
{{ end }}
Annotations
{{ range .Annotations.SortedPairs }}
{{ if eq .Name "description" }}> [描述]: {{ .Value | markdown | html }}{{ end }}
{{ end }}

{{ end }}{{ end }}

时区问题

我 的dingtalk日志 alterManager日志 还有prometheus的管理页面输出的时间都是非东8区时间,
系统命令date输出的命令时间没错 date -R也没错 grafana的时间也是正确的,请指导下~谢谢

模板问题

模板都有哪些变量呢? 比如我要发送报警时间改怎么写?谢谢大佬

配置使用自定义模板不生效

config:
templates:
  - /etc/prometheus-webhook-dingtalk/templates/default.tmpl
targets:
  k8s-dev:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
    # secret for signature
    secret: xxxxxxxx
    message:
      # Use legacy template
      title: '{{ template "legacy.title" . }}'
      text: '{{ template "legacy.content" . }}'
template:
{{/* Legacy */}}
{{ define "legacy.title" }}{{ template "__subject" . }}{{ end }}
{{ define "legacy.content" }}#### \[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}\] **[{{ index .GroupLabels "alertname" }}]**
{{- end }}

发现钉钉推送出来的信息还是default?

关于模板文件中新加一些指标如何实现。

你好, 我想在模板文件中添加告警时间 与 告警持续时间, 我通过查看该问题#24
简单修改了一下默认模板配置。

{{ define "__text_alert_list" }}{{ range . }}
**Time**
{{ .StartsAt.Format "2006-01-02 15:04:05" }}  \n
**Labels**
{{ range .Labels.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }}
{{ end }}
**Annotations**
{{ range .Annotations.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }}
{{ end }}
**Source:** [{{ .GeneratorURL }}]({{ .GeneratorURL }})

{{ .EndsAt.Sub .StartsAt }}

{{ end }}{{ end }}

404 page not found

i am getting 404 page not found while doing curl. can you please help me resolve this.

404 page not found

HI 我在K8S里面使用这个,但是post的时候都是404 开了debug模式。但是好像没有输出,我尝试用curl手动POST数据到webhook1,也是返回的404,请问可能十哪儿出现在了问题呢

是否支持同时向多个钉钉群发送报警

我将prometheus-webhook-dingtalk镜像部署到k8s集群,并使用容器启动参数来配置dingtalk_url,配置如下:

spec:
  replicas: 2
  selector:
    matchLabels:
      app: prometheus-webhook-dingtalk
  template:
    metadata:
      labels:
        app: prometheus-webhook-dingtalk
    spec:
      containers:
      - image: {{ .Values.image.repository }}/prometheus-webhook-dingtalk:v0.3.0
        name: prometheus-webhook-dingtalk
        args:
        - "--ding.profile=node=https://oapi.dingtalk.com/robot/send?access_token=d428ffd248ab55551db6f485ab49a03f7f73025d17f8cebdeys39783ac5416d3"
        - "--web.listen-address=:8060"

我用--ding.profile=node=xxx来指定dingtalk_url参数,我的问题是:

  • 如何指定多个dingtalk_url,向多个钉钉群发送报警?

respCode=300001 respMsg="token is not exist"

level=error ts=2020-03-30T03:57:11.868Z caller=dingtalk.go:103 component=web target=webhook1 msg="Failed to send notification to DingTalk" respCode=300001 respMsg="token is not exist"

钉某人无效

webhook_mention_all:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    secret: SEC000000000000000000000
    mention:
      all: true

配置完并没有@效果,access_token、secret改成我自己的了

编译报错

你好,make编译报错

[root@service01-ali_hz:/opt/prometheus-webhook-dingtalk → master]# make

formatting code
building binaries
prometheus-webhook-dingtalk
can't load package: package github.com/timonwong/promet... cannot find package "github.com/timonwong/promet..." in any of:
/opt/golang/src/github.com/timonwong/promet... (from $GOROOT)
/root/go/src/github.com/timonwong/promet... (from $GOPATH)
!! command failed: build -o /opt/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk -ldflags -s -X github.com/timonwong/promet... -X github.com/timonwong/promet... -X github.com/timonwong/promet... -X github.com/timonwong/promet... -X github.com/timonwong/promet... -extldflags '-static' -a -tags 'netgo static_build' github.com/timonwong/promet... exit status 1
make: *** [build] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.