加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

一文读懂如何在Kubernetes上轻松实现自动化部署Prometheus

发布时间:2019-08-28 12:21:58 所属栏目:Windows 来源:火眼狻猊
导读:副标题#e# 简介 Prometheus 是当下火热的监控解决方案,尤其是容器微服务架构,Kubernetes 的首选监控方案。关于为什么要用 Prometheus,我这里就不多讲,相关的文章太多了,大家也可以看看官方的说法。本文就讲讲如何自动化的搭建一套基于 Kubernetes 集群

influxdb.yaml

  1. # 持久化存储配置  
  2. persistence:  
  3.   enabled: true  
  4.   useExisting: true  
  5.   name: "influxdb-pvc"  # 使用我们刚才创建的 PVC  
  6.   accessMode: "ReadWriteOnce"  
  7.   size: 200Gi  
  8. # 创建 Prometheus 的数据库  
  9. env:  
  10.   - name: INFLUXDB_DB  
  11.     value: "prometheus"  
  12. # influxdb 配置  
  13. config:  
  14.   data:  
  15.     # 这两个配置默认限制了数据的上限,建议设置为 0 变成无限制,不然在达到上限后插入数据会返回错误  
  16.     max_series_per_database: 0  
  17.     max_values_per_tag: 0  
  18.   http:  
  19.     enabled: true  # 启动 http  
  20. initScripts:  
  21.   enabled: true  
  22.   scripts:  
  23.     # 设置数据保留策略,默认是永不失效,需要人工清理  
  24.     # 保留 180 天数据  
  25.     retention.iql: |+  
  26.       CREATE RETENTION POLICY "default_retention_policy" on "prometheus" DURATION 180d REPLICATION 1 DEFAULT 

InfluxDB 的全部配置可以参考文档,我讲一下上面的两个主要的配置。

max-series-per-database

内存中每个数据库最大的序列数量,默认是 1000000,设置为 0 改成无限制。如果新来的数据增加了序列数量并超过了这个上限,那么数据就会被丢弃就并返回一个 500 错误:

  1. {"error":"max series per database exceeded: <series>"} 

max-values-per-tag

内存中每个标签的最大数据量,默认是 100000,设置为 0 改成无限制。如果新来的数据超过了这个限制,也会被丢弃并返回写入失败的错误。

我们使用如下命令来部署 InfluxDB:

  1. helm install --name=influxdb --namespace=monitoring -f influxdb.yaml stable/influxdb 

存储后端部署成功后,我们就来部署 Prometheus-operator 了,首先创建如下的配置文件

prometheus.yaml

  1. # prometheus 服务端  
  2. prometheus:  
  3.   prometheusSpec:  
  4.     # 远端存储配置  
  5.     remoteWrite:  
  6.     - url: "http://influxdb:8086/api/v1/prom/write?db=prometheus"  
  7.     remoteRead:  
  8.     - url: "http://influxdb:8086/api/v1/prom/read?db=prometheus"  
  9.   # ingress 配置,暴露 web 界面  
  10.   ingress:  
  11.     enabled: true  
  12.     annotations:  
  13.       kubernetes.io/ingress.class: traefik  # ingress class  
  14.     hosts:  
  15.     - "prometheus.mydomain.io"  # 配置域名  
  16. alertmanager:  
  17.   # alertmanager 配置  
  18.   config:  
  19.     global:  
  20.       # SMTP 配置  
  21.       smtp_smarthost: 'xxx'  
  22.       smtp_from: 'xxx' 
  23.        smtp_auth_username: 'xxx'  
  24.       smtp_auth_password: 'xxx'  
  25.       # 全局 opsgenie 配置  
  26.       # opsgenie_api_key: ""  
  27.     # 报警路由  
  28.     route:  
  29.       receiver: 'monitoring-warning' 
  30.        group_by: ['alertname']  
  31.       group_wait: 30s  
  32.       group_interval: 3m  
  33.       repeat_interval: 8h  
  34.       routes:  
  35.       - match:  
  36.           severity: critical  
  37.         receiver: monitoring-critical  
  38.         group_by: ['alertname']  
  39.       - match:  
  40.           severity: warning  
  41.         receiver: monitoring-warning  
  42.         group_by: ['alertname']  
  43.     # 报警抑制规则  
  44.     inhibit_rules:  
  45.     - source_match:  
  46.         severity: 'critical'  
  47.       target_match:  
  48.         severity: 'warning'  
  49.       # 抑制相同的报警  
  50.       equal: ['alertname']  
  51.     # 接收者配置  
  52.     receivers:  
  53.     - name: 'monitoring-critical'  
  54.       email_configs:  
  55.       - to: 'monitor@mydomain.com'  
  56.       # 发送到钉钉的 webhook,需要部署一个转发服务,详见项目代码  
  57.       webhook_configs:  
  58.       - send_resolved: true  
  59.         url: http://prometheus-webhook-dingtalk/dingtalk/monitoring/send  
  60.     - name: 'monitoring-warning'  
  61.       email_configs:  
  62.       - to: 'monitor@mydomain.com'  
  63.   alertmanagerSpec:  
  64.     # alertmanager 存储配置,alertmanager 会以文件形式存储报警静默等配置  
  65.     storage:  
  66.       volumeClaimTemplate:  
  67.         spec:  
  68.           accessModes:  
  69.           - ReadWriteOnce  
  70.           storageClassName: monitor-ebs  # 选择合适的存储类  
  71.           resources:  
  72.             requests:  
  73.               storage: 20Gi  # 选择合适的大小  
  74.   # ingress 配置,暴露 alert 的界面  
  75.   ingress:  
  76.     enabled: true  
  77.     annotations:  
  78.       kubernetes.io/ingress.class: traefik  # ingress class  
  79.     hosts:  
  80.     - "alert.mydomain.io"  # 配置域名  
  81. # grafana 配置  
  82. grafana:  
  83.   replicas: 1  
  84.   adminPassword: "admin"  # 管理员账户 admin,密码 admin  
  85.   env:  
  86.     # GF_SERVER_DOMAIN: ""  # 域名  
  87.     GF_SERVER_ROOT_URL: "%(protocol)s://%(domain)s/"  
  88.     # GF_DATABASE_URL: "mysql://user:secret@host:port/database"  # SQL 数据库  
  89.   # ingress 配置,暴露界面  
  90.   ingress:  
  91.     enabled: true  
  92.     annotations:  
  93.       kubernetes.io/ingress.class: traefik  # ingress class  
  94.     hosts:  
  95.     - "grafana.mydomain.io"  # 设置域名  
  96. # exporter 设置,自建集群需要开启,如果是云服务商托管集群,则获取不到这些信息,可以关闭  
  97. kubeControllerManager:  
  98.   enabled: true  
  99. kubeEtcd:  
  100.   enabled: true  
  101. kubeScheduler:  
  102.   enabled: true 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读