Prometheus Operator 为k8s而生,解决了Prometheus的多个痛点,实现了简易部署、高可用和高效管理,如今已成为炙手可热的主流开源监控工具。本文将介绍在实际的运维工作中,如何使用Prometheus Operator来落地黑盒监控。
01、什么是黑/白盒监控?
黑盒监控和白盒监控,是在运维监控中常用的两种方法,黑盒主外,白盒主内,二者主要区别和应用场景为:
02、效果展示
03、Blackbox安装
blackbox可通过helm快速完成部署,具体实现步骤如下:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube prometheus-community/prometheus-blackbox-exporter -n blackbox --create-namespace --version 9.1.0
如果服务器无法添加仓库和拉取国外镜像,请使用下面的方法:
wget https://github.com/prometheus-community/helm-charts/releases/download/prometheus-blackbox-exporter-9.1.0/prometheus-blackbox-exporter-9.1.0.tgz
image:
registry: registry.cn-hangzhou.aliyuncs.com
repository: yilingyi/blackbox-exporter
# Overrides the image tag whose default is {{ printf "v%s" .Chart.AppVersion }}
tag: "0.25.0"
pullPolicy: IfNotPresent
digest: ""
helm install kube . -n blackbox --create-namespace -f ./values.yaml
04
Blackbox配置
blackbox安装后需要在blackbox.yaml中定义模块配置,如下示例分别定义了service_http_prober用于http探测,tcp_prober用于tcp探测,还有site_http_prober用于站点探测。
kubectl edit configmap kube-prometheus-blackbox-exporter -n blackbox
apiVersion: v1
data:
blackbox.yaml: |-
modules:
service_http_prober:
http:
follow_redirects: true
preferred_ip_protocol: ip4
valid_http_versions:
- HTTP/1.1
- HTTP/2.0
prober: http
timeout: 5s
tcp_prober:
prober: tcp
tcp:
ip_protocol_fallback: false
preferred_ip_protocol: ip4
site_http_prober:
http:
follow_redirects: true
preferred_ip_protocol: ip4
tls_config:
insecure_skip_verify: false
valid_http_versions:
- HTTP/1.1
- HTTP/2.0
prober: http
timeout: 10s
完成配置后重启一下blackbox,别急,下面还要继续配置
05、服务自动发现配置
在Prometheus Operator所在的命名空间下创建ServiceMonitor CRD,如下示例用的是kubesphere自带的监控组件,所以我们在命名空间kubesphere-monitoring-system下进行创建。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: blackbox-exporter
namespace: kubesphere-monitoring-system
spec:
endpoints:
- interval: 1m
params:
module:
- service_tcp_prober
path: /probe
port: java-http
relabelings:
- action: replace
sourceLabels:
- __address__
targetLabel: __param_target
- action: replace
# blackbox service地址
replacement: 'kube-prometheus-blackbox-exporter.blackbox:9115'
targetLabel: __address__
- action: replace
sourceLabels:
- __param_target
targetLabel: instance
- action: replace
regex: (.*)
replacement: $1
sourceLabels:
- __param_module
targetLabel: module
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
scrapeTimeout: 10s
- interval: 1m
params:
module:
- service_http_prober
path: /probe
port: java-http
relabelings:
- action: replace
sourceLabels:
- __address__
targetLabel: __param_target
- action: replace
replacement: 'kube-prometheus-blackbox-exporter.blackbox:9115'
targetLabel: __address__
- action: replace
sourceLabels:
- __param_target
targetLabel: instance
- action: replace
regex: (.*)
# 服务http健康检查uri
replacement: '${1}/api/healthcheck'
sourceLabels:
- __address__
targetLabel: __param_target
- action: replace
regex: (.*)
replacement: $1
sourceLabels:
- __param_module
targetLabel: module
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
scrapeTimeout: 10s
jobLabel: blackbox-exporter
# 指定命名空间,不指定则包含所有命名空间
namespaceSelector:
matchNames:
- prod
# 改成实际的Service Label
selector:
matchLabels:
app: yilingyi
kubectl apply -f serviceMonitor.yaml
06
站点拨测配置
在Prometheus Operator中,Prometheus服务的实例和配置是通过Prometheus CRD进行管理的,我们想通过scrape configs的方式管理站点拨测配置,需要执行如下步骤:
kubectl edit prometheuses k8s -n kubesphere-monitoring-system
spec:
additionalScrapeConfigs:
key: prometheus-additional.yaml
name: additional-scrape-configs
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [site_http_prober]
static_configs:
- targets: ['https://xxxxxxx']
labels:
remark: "SRE运维手记"
- targets: ['https://xxxxxxx']
labels:
remark: "SRE运维手记商城"
cat prometheus-additional.yaml | base64 | tr -d '\n' > config_encoded.yamlcat prometheus-additional.yaml | base64 | tr -d '\n' > config_encoded.yaml
apiVersion: v1
data:
prometheus-additional.yaml: <新的Base64编码值>
kind: Secret
metadata:
name: additional-scrape-configs
namespace: kubesphere-monitoring-system
type: Opaque
kubectl apply -f secret.yaml
kubectl get secret additional-scrape-configs -n kubesphere-monitoring-system -o jsonpath="{.data.prometheus-additional\.yaml}" | base64 --decode > prometheus-additional.yaml
07、结 语
完成上述配置后,可通过Prometheus UI查看是否能够正常采集数据,如果需要对核心接口进行拨测,blackbox exporter还支持Request Method进行请求,如get、post等,本期就介绍到这里,谢谢!
服务探测:9965
站点拨测:14928