NACOS+CONFD實現Prometheus規則動態更新
- 安裝go環境
-
下載安裝包(>1.10)下載地址
wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz
-
解壓到/usr/local目錄下
tar -xvf go1.13.linux-amd64.tar.gz
-
配置環境變量
export GOPATH=/root/go export GOPROXY=https://goproxy.cn export PATH=$PATH:/usr/local/go/bin
-
編譯nacos-confd
mkdir -p $GOPATH/src/github.com/kelseyhightower wget https://github.com/nacos-group/confd/archive/v0.18.0.tar.gz tar -xvf v0.18.0.tar.gz mv confd-0.18.0 confd cd confd make
-
複製confd到bin目錄下
cp bin/confd /usr/local/bin
-
創建confd所需目錄
confd 配置文件默認在 /etc/confd 中,可以通過參數 -confdir 指定。目錄中包含兩個子目錄,分別是:conf.d templates
mkdir -p /etc/confd/{conf.d,templates}
-
創建confd配置文件
confd 會先讀取 conf.d 目錄中的配置文件(toml格式),然後根據文件指定的模板路徑去渲染模板
vim /etc/confd/conf.d/prometheus-rules.toml
內容如下:
[template] src = "prometheus-rules.yml.tmpl" dest = "/opt/spring-cloud/prometheus/prometheus-rules.yml" keys = ["/prometheus-rules"] reload_cmd = "/usr/bin/curl --connect-timeout 5 --retry 5 --retry-max-time 40 -X POST http://{$HOSTS}:9090/-/reload"
注意:
src爲/etc/confd/template下的模版文件
dest: 爲prometheus告警規則的存放路徑
-
創建模版文件
vim /etc/confd/template/prometheus-rules.yml.tmpl
內容如下:
groups: - name: alert-rules rules: {{$data := jsonArray (getv "/prometheus-rules")}} {{range $data}} - alert: {{.name}} expr: {{.expr}} for: {{.period}} labels: status: {{.label}} annotations: summary: {{.summary}} {{end}}
-
在Nacos上創建所需的配置文件
注意:必須爲JSON格式數據,否則可能導致配置文件同步失敗
-
啓動confd
confd -backend nacos -node http://192.168.174.1:8848/nacos -watch
-
查看prometheus rules,如下圖所示