背景
使用夜莺对接多个集群的 promethus, 来完成多个 k8s的告警规则的汇总。
webapi 配置
webapi的配置文件,在安装目录下的 etc/webapi.conf
Mysql(DB)和Redis的配置这里就不多讲了,需要修改的单单独修改
之后需要在 webapi.conf 文件中将多个Prometheus都维护到 [[Cluster]]
[[Cluster]]
表示这部分配置是个数组可以复制多份,然后每份维护不同的Name
, Prom
填写 Prometheus 的URL即可
例如:
[[Clusters]]
# Prometheus cluster name
Name = "Default"
# Prometheus APIs base url
Prom = "http://192.168.189.170:30909"
# Basic auth username
BasicAuthUser = ""
# Basic auth password
BasicAuthPass = ""
# timeout settings, unit: ms
Timeout = 30000
DialTimeout = 3000
MaxIdleConnsPerHost = 100
[[Clusters]]
# Prometheus cluster name
Name = "161cluster"
# Prometheus APIs base url
Prom = "http://192.168.189.160:30909"
# Basic auth username
BasicAuthUser = ""
# Basic auth password
BasicAuthPass = ""
# timeout settings, unit: ms
Timeout = 30000
DialTimeout = 3000
MaxIdleConnsPerHost = 100
上面表示 Default集群链接Prometheus 是 http://192.168.189.170:30909, 161cluster 集群链接的 Prometheus 是http://192.168.189.160:30909
然后启动
nohup ./n9e webapi &> webapi.log &
Server 处理
默认的配置文件, 安装目录下的 etc/server.conf,需要修改Mysql(DB)和 Redis的配置,提前修改。 这里也不详细阐述
之后启动 server
nohup ./n9e server &> server.log &
夜莺要求 server 必须和 Prometheus一一对应,就要启动多个server, 为了方便这里就在一个服务器使用同一个安装包使用不同的配置文件启动多个实例
源码分析
从源码 src\main.go
分析看,代码中读取了conf
参数, 添加配置文件的参数应该是 conf
func newServerCmd() *cli.Command {
return &cli.Command{
Name: "server",
Usage: "Run server",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "conf",
Aliases: []string{"c"},
Usage: "specify configuration file(.json,.yaml,.toml)",
},
},
Action: func(c *cli.Context) error {
printEnv()
var opts []server.ServerOption
if c.String("conf") != "" {
opts = append(opts, server.SetConfigFile(c.String("conf")))
}
opts = append(opts, server.SetVersion(version.VERSION))
server.Run(opts...)
return nil
},
}
}
操作
将安装目录下面的的 etc/server.conf 复制一份并且重命名。
修改复制的文件对接需要监控的k8s集群的prometheus
修改 clusterName 和webapi.conf 中的一致
修改端口, 不要再用19000 了会冲突
修改Reader的Url为对应k8s的prometheus
使用 --config
参数再启动一个副本
nohup ./n9e server --conf ./etc/server61-19001.conf &> server61.log &
ps一下进程就看到了又启动一个 server 了
结果
告警引擎界面就能看到了,对应集群告警的邮件也就能发出来了