一、安装CRD模块
修改crd prometheuses,建议按照官网文档,追加在serviceMonitorSelector下面。
在 Kubernetes 中一切都可视为资源,Kubernetes 1.7 之后增加了对 CRD 自定义资源二次开发能力来扩展 Kubernetes API,通过 CRD 我们可以向 Kubernetes API 中增加新资源类型,而不需要修改 Kubernetes 源码来创建自定义的 API server,该功能大大提高了 Kubernetes 的扩展能力。
当你创建一个新的CustomResourceDefinition (CRD)时,Kubernetes API服务器将为你指定的每个版本创建一个新的RESTful资源路径,我们可以根据该api路径来创建一些我们自己定义的类型资源。CRD可以是命名空间的,也可以是集群范围的,由CRD的作用域(scpoe)字段中所指定的,与现有的内置对象一样,删除名称空间将删除该名称空间中的所有自定义对象。customresourcedefinition本身没有名称空间,所有名称空间都可以使用。
按照官方的方法修改crd https://github.com/coreos/prometheus-operator/blob/1b016520b9f1899f0973c7c0beb5acaaef2a415a/Documentation/additional-scrape-config.md
# kubectl -n monitor edit prometheuses -oyaml
additionalScrapeConfigs:
name: additional-scrape-configs
key: prometheus-additional.yaml
二、自定义HTTP探针及请求
HTTP探针是进行黑盒监控时最常用的探针之一,通过HTTP探针能够网站或者HTTP服务建立有效的监控,包括其本身的可用性,以及用户体验相关的如响应时间等等。
00_blackbox/blackbox-exporter-configmap.yaml
apiVersion: v1
data:
blackbox_exporter.yaml:
modules:
http_2xx:
prober: http
timeout: 5s
http:
http_post_2xx:
prober: http
timeout: 5s
http:
method: POST
basic_auth:
username: "username"
password: "mysecret"
# 和python中写SDK类似,记住这个名字一会需要调用
yitu_ct_http_2xx_post:
prober: http
timeout: 5s
http:
preferred_ip_protocol: "ip4"
method: POST
headers:
Content-Type: application/json
x-access-id: ABC
x-signature: signature
x-request-send-timestamp: 1575440902
cache-control: no-cache
body: '{"user_info":{"name":"郭文文","citizen_id":"23108419920818004X"}}'
kind: ConfigMap
metadata:
name: blackbox-exporter
namespace: monitor
三、将探针方法应用到监控机
additional-scrape-configs/prometheus-additional.yaml
- job_name: yitu_ct_http_2xx_post
honor_timestamps: true
params:
module:
# 调用刚才定义的方法
- yitu_ct_http_2xx_post
# 采集间隔,以为使用第三方服务,调接口需要花钱,所以间隔设置了长一点
scrape_interval: 120s
# 采集超时时间
scrape_timeout: 10s
metrics_path: /probe
scheme: http
static_configs:
- targets:
# 被采集主机
- http://192.168.1.16:9500/api/v1/conformity/two-information
- http://192.168.1.17:9500/api/v1/conformity/two-information
labels:
# 打标签,prometheus里面会用到此变量
group: yitu-ct
relabel_configs:
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: __param_target
replacement: $1
action: replace
- source_labels: [__param_target]
separator: ;
regex: (.*)
target_label: instance
replacement: $1
action: replace
- separator: ;
regex: (.*)
target_label: __address__
replacement: blackbox-exporter:9115
action: replace