kubernetes之promethus部署

  1. 星火燎原:promethus

    Prometheus的前身是由SoundCloud公司开发的报警工具包演变而来的一个开源监控系统。该系统凭借灵活的查询语法而备受广大运维人员的欢迎,因为在进入容器云时代之后,集群的监控变得更加复杂,监控维度变得混乱,仅凭借过去常见的诸如Zabbix等监控系统已经很难实现对一个集群的全方位监控 。

    从容器进入人们视野时,Prometheus的优势就逐渐显示出来了,得益于灵活的时间序列数据库,运维人员可以根据业务需要定制各式各样的监控规则。Prometheus的开发人员和用户社区非常活跃,目前Prometheus已经是一个独立的开源项目,且不依赖于任何公司。为了强调这点和明确该项目治理结构, Prometheus在2016年加入了云原生计算基金会(Cloud Native Computing Foundation),这也是该基金会继Kurberntes之后第二个入驻的项目,足以证明Prometheus在容器云方面的声望。

    1. 核心组件

    Prometheus的核心是一个时间序列数据库,我们可以通过它抓取和存储数据,并通过Prometheus 定义的一些查询语句来获取我们需要的数据。

    Prometheus架构如图所示,整个系统工作流程大体可以橄述为:Prometheus Server通过拉取(pull)的方式从监控目标的指标(metrics)获取数据,或者通过中间网关(Pushgateway)间接地拉取监控目标推送给网关的数据,后面这种情况一般出现于监控目标的网络无法直接联通Prometheus Server的时候,通过网关中转监控数据是一个常见的方法。Prometheus Server在本地存储抓取到的数据,通过一定规则进行清理和整理数据,然后把得到的结果存储起来。接下来各种WebUI就可以通过Server提供API,使用PromQL查询语言获取任意监控数据了。当Server监测到有异常时会推送报警给Alertmanager, Alertmanager处理各类报警信息之后,再把报警信息分别发送给相关人员。

    官网地址:https://prometheus.io/docs/prometheus/latest/getting_started/

    下图为企业级promethus架构

    主要组件介绍如下:

     

    Prometheus Server:用于收集和存储时间序列数据。

    Client Library:客户端库,为需要监控的服务生成相应的指标并暴露给 Prometheus server。当Prometheus server 拉取肘,直接返回实时状态的指标。

    Push Gateway:主要用于短期任务。由于这 类任务存在时间较短,可能在Prometheus拉取之前就消失了。为此,这次任务可以直接向Prometheus server端推送它们的指标。这种方式主要用于服务层面的指标,对于机器层面的指标,则需要使用node exporter。

    Exporters:用于暴露已有的第三方服务的指标给Prometheus。

    Alertmanager:从Prometheus server端接收到报警后,会进行去除重复数据、分组,并路由到相应接收方式,发出报警。常见的接收方式有:电子邮件、pagerduty、OpsGenie、webhook等。

    一些其它工具

    prothmethus客户端库只要提供4种主要的指标类型:

    Counter

    一种累加的指标,典型的应用如请求的个数、结束的任务数、出现的错误数等。

    例如,查询http_requests_total{method="get",job="Prometheus",handler="query"}返回8,10秒后,再次查询,则返回14。

    Gauge

    一种常规的metric,典型的应用如温度,运行的goroutines的个数。

    可以任意加减。

    例如,go_goroutines { instance="172.17.0.2",job="Prometheus"}返回值 147, 10秒后再次查询返回124。

     

    Histogram

    可以理解为柱状图,典型的应用如请求持续时间、响应大小等。

    可以对观察结果采样、分组及统计。

     

    summary

    与Histogram 类似,典型的应用如请求持续时间、响应大小等。

    提供观测值的count和sum功能。

    提供百分位的功能,即可以按百分比划分跟踪结果。

     

    更多详细内容参考官网

    https://prometheus.io/docs/prometheus/latest/getting_started/

     

    部署promethues,我的版本为k8s 1.20,使用以下配置是没有问题的。

     

    #创建文件prometheus-config.yml(如果是实验环境目录无所谓)

     

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prometheus-config
    data:
      prometheus.yml: |
        global:
          scrape_interval:     15s
          evaluation_interval: 15s
        scrape_configs:
          - job_name: 'prometheus'
            static_configs:
            - targets: ['localhost:9090']
    

     

      

     

     

     

    #创建 prometheus-deployment.yml 文件

     

    apiVersion: v1
    kind: "Service"
    metadata:
      name: prometheus
      labels:
        name: prometheus
    spec:
      ports:
      - name: prometheus
        protocol: TCP
        port: 9090
        targetPort: 9090
      selector:
        app: prometheus
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        name: prometheus
      name: prometheus
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: prometheus
      template:
        metadata:
          labels:
            app: prometheus
        spec:
          containers:
          - name: prometheus
            image: prom/prometheus:v2.2.1
            command:
            - "/bin/prometheus"
            args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            ports:
            - containerPort: 9090
              protocol: TCP
            volumeMounts:
            - mountPath: "/etc/prometheus"
              name: prometheus-config
          volumes:
          - name: prometheus-config
            configMap:
              name: prometheus-config
    

     

      

     

     

     

     

    访问即可,http://ip:30106还没有设置任何监控指标。

     

posted @ 2022-01-24 11:21  头发重要  阅读(191)  评论(0)    收藏  举报