回复
监控神器Prometheus(12)
icegoblin
发布于 2022-7-5 17:30
浏览
0收藏
使用Consul-template动态配置服务
# 安装Consul-template 下载地址:https://releases.hashicorp.com/consul-template/
wget https://releases.hashicorp.com/consul-template/0.22.0/consul-template_0.22.0_linux_amd64.zip
unzip consul-template_0.22.0_linux_amd64.zip
mv consul-template /usr/local/bin/
# 查看版本
consul-template -v
consul-template v0.22.0 (6cae10fe)
#常用参数的作用:
-consul-auth=<username[:password]> # 设置基本的认证用户名和密码。
-consul-addr=<address> # 设置Consul实例的地址。
-max-stale=<duration> # 查询过期的最大频率,默认是1s。
-dedup # 启用重复数据删除,当许多consul template实例渲染一个模板的时候可以降低consul的负载。
-consul-ssl # 使用https连接Consul。
-consul-ssl-verify # 通过SSL连接的时候检查证书。
-consul-ssl-cert # SSL客户端证书发送给服务器。
-consul-ssl-key # 客户端认证时使用的SSL/TLS私钥。
-consul-ssl-ca-cert # 验证服务器的CA证书列表。
-consul-token=<token> # 设置Consul API的token。
-syslog # 把标准输出和标准错误重定向到syslog,syslog的默认级别是local0。
-syslog-facility=<facility> # 设置syslog级别,默认是local0,必须和-syslog配合使用。
-template=<template> # 增加一个需要监控的模板,格式是:'templatePath:outputPath(:command)',多个模板则可以设置多次。
-wait=<duration> # 当呈现一个新的模板到系统和触发一个命令的时候,等待的最大最小时间。如果最大值被忽略,默认是最小值的4倍。
-retry=<duration> # 当在和consul api交互的返回值是error的时候,等待的时间,默认是5s。
-config=<path> # 配置文件或者配置目录的路径。
-pid-file=<path> # PID文件的路径。
-log-level=<level> # 设置日志级别,可以是"debug","info", "warn" (default), and "err"。
-dry # Dump生成的模板到标准输出,不会生成到磁盘。
-once # 运行consul-template一次后退出,不以守护进程运行
# 在conf目录下创建1个nginx.json的配置文件
cat >> /data/consul/server1/config/nginx.json <<EOF
{
"service":{
"name":"nginx",
"tags":[
"web"
],
"port":80,
"check":{
"http":"http://127.0.0.1:80",
"interval":"10s"
},
"token":"${CONSUL_HTTP_TOKEN}"
}
}
EOF
# 热加载配置文件
consul reload
# 验证服务是否注册成功
curl -H "x-consul-token: ${CONSUL_HTTP_TOKEN}" http://172.26.42.229:8500/v1/catalog/service/nginx | python -m json.tool
[
{
"Address": "172.26.42.229",
"CreateIndex": 21233,
"Datacenter": "prometheus",
"ID": "09d82408-bc4f-49e0-4208-61ef1d4842f7",
"ModifyIndex": 21233,
"Node": "server1",
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceAddress": "",
"ServiceConnect": {},
"ServiceEnableTagOverride": false,
"ServiceID": "nginx",
"ServiceKind": "",
"ServiceMeta": {},
"ServiceName": "nginx",
"ServicePort": 80,
"ServiceProxy": {
"MeshGateway": {}
},
"ServiceTags": [
"web"
],
"ServiceWeights": {
"Passing": 1,
"Warning": 1
},
"TaggedAddresses": {
"lan": "172.26.42.229",
"wan": "172.26.42.229"
}
}
]
# 创建模板
cat > tmpltest.ctmpl << EOF
{{range services}}
{{.Name}}
{{range .Tags}}
{{.}}{{end}}
{{end}}
EOF
# 调用模板渲染
consul-template -consul-addr 172.26.42.229:8500 -template "/data/consul/consul-template/conf/tmpltest.ctmpl:result" -once
# 查看模板渲染的输出结果,返回的结果:consul是系统自带的服务,nginx是刚才注册的服务,Tags是web
cat result
consul
nginx
web
# 创建nginx模板文件
cat >> /data/consul/consul-template/conf/nginx.conf.ctmpl << EOF
{{range services}} {{$name := .Name}} {{$service := service .Name}}
upstream {{$name}} {
zone upstream-{{$name}} 64k;
{{range $service}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
} {{end}}
server {
listen 80 default_server;
location / {
root /usr/share/nginx/html/;
index index.html;
}
location /stub_status {
stub_status;
}
{{range services}} {{$name := .Name}}
location /{{$name}} {
proxy_pass http://{{$name}};
}
{{end}}
}
EOF
# 调用模板文件生成Nginx配置文件
consul-template -consul-addr 172.26.42.229:8500 -template "/data/consul/consul-template/conf/nginx.conf.ctmpl:nginx.conf" -once
# 为了更加安全,token从环境变量里读取,使用CONSUL_TOKEN和VAULT_TOKEN。强烈建议你不要把token放到未加密的文本配置文件中。
# 创建一个nginx.hcl文件
cat >> nginx.hcl << EOF
consul {
address = "172.26.42.229:8500"
}
template {
source = "/data/consul/consul-template/conf/nginx.conf.ctmpl"
destination = "/etc/nginx/conf/conf.d/default.conf"
command = "service nginx reload"
}
EOF
# 执行渲染测试命令
consul-template -config "nginx.hcl:test.out"
# 同时渲染多个template后台启动
cat > consul_temp.sh << EOF
#!/bin/bash
#prom
cd /data/consul/consul-template/ && nohup /usr/local/bin/consul-template -config=/data/consul/consul-template/hcl_conf/ & 2>&1
EOF
结语:
相比于直接使用静态配置和基于文件发现,是不利于云环境以及k8s环境的,因为我们大多时候更多监控对象都是动态的。因此,通过服务发现,使得Prometheus相比于其他传统监控解决方案更适用于云以及k8s环境下的监控需求。
对于Consul的使用方法还有很多,大同小异,主要还是根据你自己的环境与架构来设计,如果你有什么不懂的地方,可以扫描下面的二维码,加入我们来一起探讨云原生生态相关技术。
下一篇幅,在来讲讲Prometheus的数据持久化该如何做~
欢迎大家关注我的公众号ID:k8stech
文章转自公众号:Kubernetes技术栈
标签
已于2022-7-5 17:30:15修改
赞
收藏
回复
相关推荐