云原生监控通过blackbox_exporter监控网站
有时候我们需要对主机存活,端口存活及网站状态进行检测下,看下我们的网站访问耗时是不是很长,你的监控系统是用的prometheus,那么我们可以部署blackbox_exporter来采集数据到prometheus,blackbox_exporter允许通过HTTP,HTTPS,DNS,TCP和ICMP对端点进行黑盒探测,由于我们的服务都是在腾讯云上,prometheus也是用的云上托管,叫做云原生监控,但是云原生监控并没有提供网站站点的监控,这里需要我们自己部署blackbox_exporter来进行采集。下面我们说说如何部署blackbox_exporter来监测我们的站点。
首先这里你要有云原生监控实例并且关联你的tke集群,这里就不细说云原生监控的创建和tke集群的部署使用了。我们直接说如何在tke部署blackbox_exporter,然后通过云原生监控来采集数据,最后在grafann里面通过dashboard来查看监控。
1. tke集群部署blackbox_exporter
首先我们配置下blackbox_exporter的启动配置
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: blackbox-exporter
name: blackbox-exporter
namespace: monitor
data:
blackbox.yml: |-
modules:
http_2xx:
prober: http
timeout: 2s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
valid_status_codes: [200,301,302]
method: GET
preferred_ip_protocol: "ip4"
tcp_connect:
prober: tcp
timeout: 2s
然后部署下对应blackbox_exporter
kind: Deployment
apiVersion: apps/v1
metadata:
name: blackbox-exporter
namespace: monitor
labels:
app: blackbox-exporter
spec:
replicas: 1
selector:
matchLabels:
app: blackbox-exporter
template:
metadata:
labels:
app: blackbox-exporter
spec:
volumes:
- name: config
configMap:
name: blackbox-exporter
defaultMode: 420
containers:
- name: blackbox-exporter
image: prom/blackbox-exporter:v0.16.0
imagePullPolicy: IfNotPresent
args:
- --config.file=/etc/blackbox_exporter/blackbox.yml
- --log.level=info
- --web.listen-address=:9115
ports:
- name: blackbox-port
containerPort: 9115
protocol: TCP
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 50Mi
volumeMounts:
- name: config
mountPath: /etc/blackbox_exporter
readinessProbe:
tcpSocket:
port: 9115
initialDelaySeconds: 5
timeoutSeconds: 5
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
然后我们部署一个service提供给prometheus采集数据,由于prometheus部署的集群和tke集群不是在一个集群,但是是在一个vpc下,所以这里blackbox_exporter通过内网的LoadBalancer来暴露服务,我这里的service对应的内网lb的ip是10.0.0.178
apiVersion: v1
kind: Service
metadata:
name: blackbox-exporter
namespace: monitor
spec:
externalTrafficPolicy: Cluster
ports:
- name: blackbox-port
nodePort: 31005
port: 9115
protocol: TCP
targetPort: 9115
selector:
app: blackbox-exporter
sessionAffinity: None
type: LoadBalancer
到这里我们的blackbox_exporter就部署好了,下面我们来在prometheus里面配置下RawJobs采集blackbox_exporter的数据
2. 云原生监控配置RawJobs采集数据
进入云原生监控找到你关联集群,点击数据采集配置,然后再RawJobs里面新增一个jobs,job配置如下,如果需要监控多个站点可以配置多个job,也可以按照官方推荐配置
scrape_configs:
- job_name: blog-blackbox
honor_timestamps: true
params:
module:
- http_2xx
metrics_path: /probe
scheme: http
static_configs:
- targets:
- https://www.niewx.cn/
labels:
domain: www.niewx.cn
instance: https://www.niewx.cn/
ip: githubpage
port: "443"
project: blog
service: none
- targets:
- https://www.niewx.cn/mybook/
labels:
domain: www.niewx.cn
instance: https://www.niewx.cn/mybook/
ip: githubpage
port: "443"
project: mybook
service: none
relabel_configs:
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: __param_target
replacement: $1
action: replace
- separator: ;
regex: (.*)
target_label: __address__
replacement: blackbox-exporter.monitor.svc.cluster.local:9115
action: replace
The blackbox exporter needs to be passed the target as a parameter, this can be done with relabelling.
Example config:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx] # Look for a HTTP 200 response.
static_configs:
- targets:
- http://prometheus.io # Target to probe with http.
- https://prometheus.io # Target to probe with https.
- http://example.com:8080 # Target to probe with http on port 8080.
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115 # The blackbox exporter's real hostname:port.
点击配置完成后,在target里面显示up状态说明配置采集成功
3. grafana导入blackbox_exporter模板
我们登录云原生监控的grafana,然后在导入模板,这里模板为9965号
这里选择下我们配置的job
然后就可以查看我们的站点监控了
到这里我们用云原生监控开监控我们的站点就完成了,如果想了解更多Blackbox Exporter信息,可以参考github https://github.com/prometheus/blackbox_exporter,上面有更多实例和源码介绍