From f300866a339d61c7839fa4dfa59a830b49577ce6 Mon Sep 17 00:00:00 2001 From: zhang21 Date: Thu, 6 Jun 2024 14:13:23 +0800 Subject: [PATCH 1/2] fix: es 7.x and es 8.x --- Dockerfile | 4 +- README.MD | 100 +++++++++++++++++++------ controllers/prometheus.go | 10 ++- controllers/prometheusalert.go | 6 +- doc/readme/alertgroup.md | 4 +- doc/readme/conf-dingding.md | 5 +- doc/readme/conf-es.md | 15 +++- go.mod | 35 ++++++++- go.sum | 53 +++---------- models/elastic/elasticsearch.go | 128 +++++++++++++++----------------- 10 files changed, 208 insertions(+), 152 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4386cd7d..3934a323 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20.6-alpine3.18 as builder +FROM golang:1.21-alpine3.20 as builder WORKDIR $GOPATH/src/github.com/feiyu563/PrometheusAlert @@ -14,7 +14,7 @@ COPY . $GOPATH/src/github.com/feiyu563/PrometheusAlert RUN make build # ----------------------------------------------------------------------------- -FROM alpine:3.18 +FROM alpine:3.20 LABEL maintainer="jikun.zhang" diff --git a/README.MD b/README.MD index 09fe5abe..2a03f60b 100644 --- a/README.MD +++ b/README.MD @@ -1,7 +1,5 @@ # PrometheusAlert全家桶 ---------------------------------------- - ![author](https://img.shields.io/badge/author-jikun.zhang-blueviolet.svg) ![license](https://img.shields.io/github/license/feiyu563/PrometheusAlert.svg) ![last commit](https://img.shields.io/github/last-commit/feiyu563/PrometheusAlert.svg) @@ -16,23 +14,70 @@ [![Travis](https://img.shields.io/badge/language-JavaScript-yellow.svg)]() [![Travis](https://img.shields.io/badge/language-Shell-blue.svg)]() ---------------------------------------- +
+ +## 项目介绍 PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据可视化系统Grafana、SonarQube。阿里云-云监控,以及所有支持WebHook接口的系统发出的预警消息,支持将收到的这些消息发送到钉钉,微信,email,飞书,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)等。 ![it](doc/images/it.png) ----------------------------------------- +-------------------------------------- * 如果这个项目能为您带来帮助,我将感到非常荣幸!同时非常欢迎您加入PrometheusAlert全家桶的微信群一起探讨关于PrometheusAlert新一期的开发计划。 - * PrometheusAlert的成长离不开所有爱好运维和开发的朋友们的支持!如果您也对这个项目感兴趣,请点击一下 Star 以示鼓励,谢谢 ----------------------------------------- +
-## 构建 +## 项目架构 -应用信息和构建相关的命令都写入了Makefile,请确保安装`make`, `git`, `go`命令。如有特定需要,请自行修改Makefile。 +PrometheusAlert 后端使用了 [beego](https://github.com/beego/beego) 框架,前端使用了 [AdminLTE](https://github.com/ColorlibHQ/AdminLTE) (基于 Bootstrap 和 Jquery)模板。 + +项目文件: + +``` +├── cmd: 脚本 +├── conf: 配置 +├── controllers:控制器 +├── db:默认的 sqlite 数据 +├── doc:文档 +├── docker-entrypoint.sh:容器运行入口文件 +├── Dockerfile +├── example:示例文件 +├── go.mod +├── go.sum +├── LICENSE +├── main.go +├── Makefile +├── models:模型 +├── PrometheusAlert:二进制文件 +├── PrometheusAlertVoicePlugin +├── README.MD +├── routers:路由 +├── static:静态资源 +├── swagger +├── tests:测试 +├── views:前端模板 +└── zabbixclient +``` + +
+ +## 快速开始 + +你可以通过以下方式快速开始: + +- 通过源代码构建 +- 下载发行版本 +- 通过 Docker 运行 + +
+ +### 构建 + +应用信息和构建相关的命令都写入了 Makefile,请确保安装`make`, `git`, `go`命令。如有特定需要,请自行修改 Makefile。 + +默认构建生成的文件是 `./PrometheusAlert`。 ```sh # 默认 @@ -61,9 +106,9 @@ curl http://localhost:8080/health
-------------------------------------- +### 下载发行版本 -## 启动 +通过下载编译好的发行版本,解压后运行。 ```sh #打开PrometheusAlert releases页面,根据需要选择需要的版本下载到本地解压并进入解压后的目录 @@ -82,7 +127,9 @@ curl http://localhost:8080/health # 如果需要将日志输出到控制台,请修改 app.conf 中 logtype=console ``` -## Docker 启动 +
+ +### 通过 Docker 启动 配置文件 app.conf 的内容可以使用环境变量的方式初始化。 @@ -92,7 +139,7 @@ curl http://localhost:8080/health 示例 -``` +```sh docker run -d \ -p 8080:8080 \ -e PA_LOGIN_USER=prometheusalert \ @@ -104,18 +151,29 @@ docker run -d \ feiyu563/prometheus-alert:latest ``` -所有的配置文件内容请[点击此处](https://github.com/feiyu563/PrometheusAlert/blob/master/conf/app-example.conf)查看 +
+ +### 配置文件 + +配置文件位于 `conf/app.conf`,默认采用 INI 格式解析。 + +所有的配置文件内容请[点击此处](https://github.com/feiyu563/PrometheusAlert/blob/master/conf/app-example.conf)查看。 + +
+ +### 运行效果图 ---------------------------------------- +程序运行后,访问默认地址 `http://localhost:8080` 的效果如下。 ![dashboard](doc/images/dashboard.png) + ![dashboard-test](doc/images/template.png) --------------------------------------- +
-## PrometheusAlert具备如下特性 +## 特性 --------------------------------------- +PrometheusAlert 具备如下特性: - 支持任意包含WebHook接口系统的消息作为消息来源,常见的如Prometheus,Zabbix,Graylog2,Graylog3,Grafana,SonarQube和其他WebHook接口的系统。 - 支持多种类型的发送目标,支持钉钉,企业微信,email,飞书,腾讯短信,腾讯语音,阿里云短信,阿里云语音,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)。 @@ -129,7 +187,7 @@ feiyu563/prometheus-alert:latest - 增加支持钉钉,企业微信的@某人功能 - 增加支持阿里云-云监控告警 - 增加随机轮询,目前仅针对ddurl,fsurl,wxurl有效,默认情况下如果上述Url配置的是多个地址,则多个地址全部发送,如开启该选项,则从多个地址中随机取一个地址发送,主要是为了避免消息发送频率过高导致触发部分机器人拦截消息 - - 增加支持将Prometheus告警记录写入到Elasticsearch7.x,可通过Kibana进行界面查看告警记录和配置表格导出。 + - 增加支持将 Prometheus 告警记录写入到 ES7.x 和 ES 8.x,可通过 Kibana 进行界面查看告警记录和配置表格导出。 - 增加支持将Gitlab webhook event推送到企微和钉钉。 - 增加告警路由和告警记录功能,可通过页面查看告警历史和操作告警消息路由。 - 增加告警语音播报插件。 @@ -138,12 +196,10 @@ feiyu563/prometheus-alert:latest - 增加热加载配置接口 - 增加钉钉加签 -------------------------------------- +
## 致谢以下伙伴对PrometheusAlert的贡献 --------------------------------------- - - [@cyancow](https://github.com/cyancow) - [@birkh8792](https://github.com/birkh8792) - [@minibear2333](https://github.com/minibear2333) @@ -154,7 +210,7 @@ feiyu563/prometheus-alert:latest - [@guvmao](https://github.com/guvmao) - [@lusson-luo](https://github.com/lusson-luo) --------------------------------------- +
## PrometheusAlert全家桶新手入门 diff --git a/controllers/prometheus.go b/controllers/prometheus.go index 6670caff..8a3b19ce 100644 --- a/controllers/prometheus.go +++ b/controllers/prometheus.go @@ -4,6 +4,7 @@ import ( "PrometheusAlert/models" "PrometheusAlert/models/elastic" "encoding/json" + "fmt" "sort" "strconv" "strings" @@ -30,6 +31,7 @@ type Labels struct { Job string `json:"job"` Hostgroup string `json:"hostgroup,omitempty"` Hostname string `json:"hostname,omitempty"` + Cloud string `json:"cloud"` } // Annotations are promtheus annotions. @@ -376,8 +378,7 @@ func SendMessageR(message Prometheus, rwxurl, rddurl, rfsurl, rphone, remail, rg dt := time.Now() dty, dtm := dt.Year(), int(dt.Month()) // example esIndex: prometheusalert-202112 - esIndex := "prometheusalert-" + strconv.Itoa(dty) + strconv.Itoa(dtm) - // Index a prometheusalert (using JSON serialization) + esIndex := fmt.Sprintf("prometheusalert-%d%02d", dty, dtm) alert := &elastic.AlertES{ Alertname: RMessage.Labels.Alertname, Status: RMessage.Status, @@ -389,8 +390,11 @@ func SendMessageR(message Prometheus, rwxurl, rddurl, rfsurl, rphone, remail, rg StartsAt: At, EndsAt: Et, Created: dt, + Cloud: RMessage.Labels.Cloud, + Hostgroup: RMessage.Labels.Hostgroup, + Hostnmae: RMessage.Labels.Hostname, } - elastic.Insert(esIndex, alert) + go elastic.Insert(esIndex, *alert) } } return "告警消息发送完成." diff --git a/controllers/prometheusalert.go b/controllers/prometheusalert.go index a4b30994..573825f1 100644 --- a/controllers/prometheusalert.go +++ b/controllers/prometheusalert.go @@ -5,9 +5,9 @@ import ( "PrometheusAlert/models/elastic" "bytes" "encoding/json" + "fmt" tmplhtml "html/template" "regexp" - "strconv" "strings" "text/template" "time" @@ -362,7 +362,7 @@ func SetRecord(AlertValue interface{}) { if beego.AppConfig.DefaultString("alert_to_es", "0") == "1" { dt := time.Now() dty, dtm := dt.Year(), int(dt.Month()) - esIndex := "prometheusalert-" + strconv.Itoa(dty) + strconv.Itoa(dtm) + esIndex := fmt.Sprintf("prometheusalert-%d%02d", dty, dtm) alert := &elastic.AlertES{ Alertname: Alertname, Status: Status, @@ -375,7 +375,7 @@ func SetRecord(AlertValue interface{}) { EndsAt: EndAt, Created: dt, } - elastic.Insert(esIndex, alert) + go elastic.Insert(esIndex, *alert) } } diff --git a/doc/readme/alertgroup.md b/doc/readme/alertgroup.md index c14191f8..89291419 100644 --- a/doc/readme/alertgroup.md +++ b/doc/readme/alertgroup.md @@ -43,7 +43,7 @@ open-alertgroup=1 # sa 组 [ag-sa] wxurl=wxurl1,wxurl2 -ddurl=ddurl1 +ddurl=https://oapi.dingtalk.com/robot/send?access_token=xxx&secret=xx phone=13x,15x # 自定义的告警组配置 @@ -70,7 +70,7 @@ phone=13x,17x,18x # 自定义模板告警组示例,目前仅处理了以下这些参数 [customtpl] wxurl=wxurl1,wxurl2 -ddurl=ddurl1,ddurl2 +ddurl=ddurl1,https://oapi.dingtalk.com/robot/send?access_token=xxx&secret=xx fsurl=fsurl1,fsurl2 email=email1,email2 phone=phone1,phone2 diff --git a/doc/readme/conf-dingding.md b/doc/readme/conf-dingding.md index 09e5a3b0..4028d2c2 100644 --- a/doc/readme/conf-dingding.md +++ b/doc/readme/conf-dingding.md @@ -62,6 +62,10 @@ ## 钉钉加签配置 +**建议使用 [告警组](alertgroup.md) 来配置钉钉地址和加签配置**。 + +
+ 增加钉钉加签的配置。创建自定义机器人的时候,选择加签,并复制加签内容组装到到机器人地址参数(webhook url parm secret)。程序会获取这个 `secret` 参数,进行加签处理之后生成对应的加签地址。 如果配置文件中启用了钉钉加签认证,但 webhook url 并没有传递 parm secret,那么程序将返回不加签的地址。也就是说,PrometheusAlert 配置中启用钉钉加签并不会影响不加签的机器人。 @@ -109,7 +113,6 @@ http://prometheusalert:8080/prometheusalert?type=dd&tpl=prometheus-dd&ddurl=加 http://prometheusalert:8080/prometheusalert?type=dd&tpl=prometheus-dd&ddurl=不加签地址,加签地址%26secret=xxx ``` -

diff --git a/doc/readme/conf-es.md b/doc/readme/conf-es.md index 08fdf001..254c70bd 100644 --- a/doc/readme/conf-es.md +++ b/doc/readme/conf-es.md @@ -1,8 +1,12 @@ # 告警记录写入Elasticsearch **注意**: -- 客户端适配的是ES7.x版本! -- 索引根据年月动态创建`prometheusalert-YYMM`(如prometheusalert-202112) + +- 支持 ES 7.x 和 8.x 版本。(ES 从 v7 到 v8 有一些变化,但主要的 API 设计上是保持兼容的。) +- 索引根据年月动态创建 `prometheusalert-YYMM`(如prometheusalert-202112) + +
+
## es相关配置 @@ -10,8 +14,7 @@ # 是否将告警记录写入es7,0为关闭,1为开启 alert_to_es=0 -# es地址,是[]string -# beego.AppConfig.Strings读取配置为[]string,使用";"而不是"," +# es地址,是[]string,beego.AppConfig.Strings读取配置为[]string,使用";"而不是"," # 单个地址 to_es_url=http://localhost:9200 # 多个地址 @@ -22,11 +25,15 @@ to_es_url=http://localhost:9200 # to_es_pwd=password ``` +
+
+ ## Kibana展示效果 可直接创建索引模式展示告警记录。还可以自行创建表格、柱状图等展示。 ![kibana-index](../images/kibana-index.png) +
![kibana-table](../images/kibana-table.png) diff --git a/go.mod b/go.mod index 18b7a885..cde9eb19 100644 --- a/go.mod +++ b/go.mod @@ -1,22 +1,53 @@ module PrometheusAlert -go 1.16 +go 1.21 require ( github.com/aliyun/alibaba-cloud-sdk-go v1.61.1537 github.com/astaxie/beego v1.12.3 github.com/baidubce/bce-sdk-go v0.9.111 + github.com/elastic/go-elasticsearch/v7 v7.17.10 github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df github.com/go-sql-driver/mysql v1.6.0 github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 github.com/lib/pq v1.10.4 github.com/mattn/go-sqlite3 v2.0.3+incompatible - github.com/olivere/elastic/v7 v7.0.32 github.com/prometheus/client_golang v1.12.1 github.com/robfig/cron/v3 v3.0.1 github.com/smartystreets/goconvey v1.7.2 github.com/stretchr/testify v1.8.4 github.com/ysicing/workwxbot v1.1.0 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/jtolds/gls v4.20.0+incompatible // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect + github.com/smartystreets/assertions v1.2.0 // indirect + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect + golang.org/x/net v0.0.0-20210525063256-abc453219eb5 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/text v0.3.6 // indirect + google.golang.org/protobuf v1.26.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect + gopkg.in/ini.v1 v1.66.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 7e6d211d..2e855e43 100644 --- a/go.sum +++ b/go.sum @@ -45,7 +45,6 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.61.1537 h1:R6hnGHYn3jLXgv5lGi2vUvmTENd github.com/aliyun/alibaba-cloud-sdk-go v1.61.1537/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ= github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA= -github.com/aws/aws-sdk-go v1.43.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/baidubce/bce-sdk-go v0.9.111 h1:yGgtPpZYUZW4uoVorQ4xnuEgVeddACydlcJKW87MDV4= github.com/baidubce/bce-sdk-go v0.9.111/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= @@ -75,14 +74,14 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI= +github.com/elastic/go-elasticsearch/v7 v7.17.10 h1:TCQ8i4PmIJuBunvBS6bwT2ybzVFxxUhhltAs3Gyu1yo= +github.com/elastic/go-elasticsearch/v7 v7.17.10/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -96,8 +95,6 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= @@ -111,7 +108,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -148,11 +144,10 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -164,7 +159,6 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= @@ -175,13 +169,8 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -207,8 +196,6 @@ github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDu github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -224,12 +211,9 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/olivere/elastic/v7 v7.0.32 h1:R7CXvbu8Eq+WlsLgxmKVKPox0oOwAE/2T9Si5BnvK6E= -github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= @@ -273,25 +257,17 @@ github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= -github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= @@ -309,9 +285,6 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk= -go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -378,10 +351,8 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -430,25 +401,21 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -496,7 +463,6 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -561,7 +527,6 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/models/elastic/elasticsearch.go b/models/elastic/elasticsearch.go index 6a29ca3b..f2168f34 100644 --- a/models/elastic/elasticsearch.go +++ b/models/elastic/elasticsearch.go @@ -1,15 +1,21 @@ package elastic import ( + "bytes" "context" + "encoding/json" "time" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" - es7 "github.com/olivere/elastic/v7" + "github.com/elastic/go-elasticsearch/v7" + "github.com/elastic/go-elasticsearch/v7/esapi" ) -var esCli *es7.Client +var ( + r map[string]interface{} + esClient *elasticsearch.Client +) // AlertES is a alert structure used for serializing data in ES. type AlertES struct { @@ -23,28 +29,11 @@ type AlertES struct { StartsAt string `json:"startsAt"` EndsAt string `json:"endsAt"` Created time.Time `json:"created"` + Cloud string `json:"cloud"` + Hostgroup string `json:"hostgroup"` + Hostnmae string `json:"hostname"` } -// es mapping field datatypes -const mapping = `{ - "mappings": { - "prometheusalert": { - "properties": { - "alertname": {"type": "keyword"}, - "status": {"type": "keyword"}, - "instance": {"type": "keyword"}, - "level": {"type": "keyword"}, - "labels": {"type": "keyword"}, - "startsAt": {"type": "date"}, - "endsAt": {"type": "date"}, - "created": {"type": "date"}, - "summary": {"type": "text", "store": true, "fielddata": true}, - "description": {"type": "text", "store": true, "fielddata": true} - } - } - } -}` - func init() { alertToES := beego.AppConfig.DefaultString("alert_to_es", "0") if alertToES == "1" { @@ -52,63 +41,64 @@ func init() { esUser := beego.AppConfig.DefaultString("to_es_user", "") esPwd := beego.AppConfig.DefaultString("to_es_pwd", "") - err := NewESClient(esURL, esUser, esPwd) + var err error + cfg := elasticsearch.Config{ + Addresses: esURL, + Username: esUser, + Password: esPwd, + } + esClient, err = elasticsearch.NewClient(cfg) + if err != nil { - logs.Error("[elasticsearch] Connecting to es %s error: %s", esURL, err) + logs.Error("[elasticsearch] Error creating the client: %s", err) + } + + // 如果 ES 不可用或连接异常等问题,获取 ES 集群信息会 panic 导致程序崩溃,因此使用 return 提前退出 + res, err := esClient.Info() + if err != nil { + logs.Critical("[elasticsearch] Error getting response: %s from cluster %s", err, esURL) + return + } + // 避免 res 为空(连接错误)时 panic 导致崩溃 + if res != nil { + defer res.Body.Close() + if res.IsError() { + logs.Error("[elasticsearch] Connection error: %s", res.String()) + return + } + if err := json.NewDecoder(res.Body).Decode(&r); err != nil { + logs.Error("[elasticsearch] Error parsing the response body: %s", err) + } + logs.Info("[elasticsearch] Successfully connected to ES Server Version: %s", r["version"].(map[string]interface{})["number"]) } } } -// NewESClient creates a new es client. -func NewESClient(url []string, user, pwd string) error { - ctx := context.Background() - var err error - esCli, err = es7.NewClient( - es7.SetURL(url...), - es7.SetBasicAuth(user, pwd), - es7.SetSniff(false), - es7.SetHealthcheck(false), - ) +func Insert(index string, alert AlertES) { + doc, err := json.Marshal(alert) if err != nil { - return err + logs.Error("[elasticsearch] error marshaling document: %w", err) + return } - info, code, err := esCli.Ping(url[0]).Do(ctx) - if err != nil { - return err + req := esapi.IndexRequest{ + Index: index, + Body: bytes.NewReader(doc), + Refresh: "true", } - logs.Info("[elasticsearch] ES returned with code: %d and version: %s", code, info.Version.Number) - - return nil -} - -// Insert writes prometheus alert to es. -func Insert(index string, value interface{}) { - ctx := context.Background() - /* - exists, err := esCli.IndexExists(index).Do(ctx) - if err != nil { - logs.Error("[elasticsearch] ES index: %s is not exist: %s", index, err) - } - if !exists { - createIndex, err := esCli.CreateIndex(index).Do(ctx) - if err != nil { - logs.Error("[elasticsearch] Create es index: %s error: %s", index, err) - } - if !createIndex.Acknowledged { - // Not acknowledge - } - } - */ - res, err := esCli.Index(). - Index(index). - Type("prometheusalert"). - BodyJson(value). - Do(ctx) + res, err := req.Do(context.Background(), esClient) if err != nil { - logs.Error("[elasticsearch] Index a prometheusalert alert to es error: %s", err) - } else { - logs.Info("[elasticsearch] Index a prometheusalert alert id: %s to index: %s succesful.", res.Id, res.Index) + logs.Critical("[elasticsearch] Error getting response: %s", err) + return } + if res != nil { + defer res.Body.Close() + if res.IsError() { + logs.Error("[elasticsearch] Error indexing alert document: %s", err) + return + } + } + + logs.Info("[elasticsearch] alert document indexed successfully in index %s", index) } From 38263ed7b55df40e96594ae20731ccf0105cbcae Mon Sep 17 00:00:00 2001 From: zhang21 Date: Fri, 7 Jun 2024 17:45:54 +0800 Subject: [PATCH 2/2] fix: es 8.x date format --- models/elastic/elasticsearch.go | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/models/elastic/elasticsearch.go b/models/elastic/elasticsearch.go index f2168f34..611221cf 100644 --- a/models/elastic/elasticsearch.go +++ b/models/elastic/elasticsearch.go @@ -13,11 +13,13 @@ import ( ) var ( - r map[string]interface{} - esClient *elasticsearch.Client + r map[string]interface{} + esClient *elasticsearch.Client + PCstTime, _ = beego.AppConfig.Int("prometheus_cst_time") ) // AlertES is a alert structure used for serializing data in ES. +// 将 created 定义为 es 默认的 @timestamp 时间戳字段 type AlertES struct { Alertname string `json:"alertname"` Status string `json:"status"` @@ -28,7 +30,7 @@ type AlertES struct { Description string `json:"description"` StartsAt string `json:"startsAt"` EndsAt string `json:"endsAt"` - Created time.Time `json:"created"` + Created time.Time `json:"@timestamp"` Cloud string `json:"cloud"` Hostgroup string `json:"hostgroup"` Hostnmae string `json:"hostname"` @@ -75,6 +77,13 @@ func init() { } func Insert(index string, alert AlertES) { + // GetCSTtime 将日期格式从 "2024-06-06T11:00:00Z" 转成了 "2024-06-06 11:00:00" + // 插入 es 时默认把 starsat 和 endsat 识别为 date,导致格式不匹配的错误。 + if PCstTime == 1 { + alert.StartsAt = timeConvert(alert.StartsAt) + alert.EndsAt = timeConvert(alert.EndsAt) + } + doc, err := json.Marshal(alert) if err != nil { logs.Error("[elasticsearch] error marshaling document: %w", err) @@ -95,10 +104,23 @@ func Insert(index string, alert AlertES) { if res != nil { defer res.Body.Close() if res.IsError() { - logs.Error("[elasticsearch] Error indexing alert document: %s", err) + logs.Error("[elasticsearch] Error indexing alert document: %s", res.String()) return } } logs.Info("[elasticsearch] alert document indexed successfully in index %s", index) } + +func timeConvert(csttime string) string { + loc, _ := time.LoadLocation("Asia/Shanghai") + t, err := time.ParseInLocation("2006-01-02 15:04:05", csttime, loc) + if err != nil { + return "" + } + + _, offset := t.Zone() + utcTime := t.Add(time.Duration(-offset) * time.Second) + + return utcTime.Format("2006-01-02T15:04:05Z") +}