prometheus_prometheus配置 - CSDN
prometheus 订阅
土卫十六(Prometheus)是距土星第三近卫星, 距土星 139,350 千米,直径91 千米(145×85×62),质量2.7e17 千克。根据1995年6月的土星光环平面交叉线观察发现,土卫十六比从旅行者号1981年数据算出的所在位置落后了20度,这是不足以用观察误差所能解释的。可能土卫十六的轨道与F环遭遇而发生改变或者他可能有一个小伴星与它一起分享这个轨道。土卫十六与土卫十七是土星的牧羊犬卫星。 展开全文
土卫十六(Prometheus)是距土星第三近卫星, 距土星 139,350 千米,直径91 千米(145×85×62),质量2.7e17 千克。根据1995年6月的土星光环平面交叉线观察发现,土卫十六比从旅行者号1981年数据算出的所在位置落后了20度,这是不足以用观察误差所能解释的。可能土卫十六的轨道与F环遭遇而发生改变或者他可能有一个小伴星与它一起分享这个轨道。土卫十六与土卫十七是土星的牧羊犬卫星。
信息
质    量
2.7e17kg
分    类
卫星
发现者
S. Collins
公转周期
15h
中文名
土卫十六
直    径
91km
发现时间
1980年
外文名
Prometheus
单元测试详解
Prometheus(普罗米修斯)是一位从奥林匹斯山偷走火种并把它带到人间的巨人。就因为这,宙斯用残忍的手段来惩罚他;他是Iapetus的儿子,Atlas和Epimetheus的兄弟。它在希腊语中意为“深思远虑”它是被S. Collins和其他一些人于1980年从旅行者号传回的照片中发现的。从它们很低的密度和相对较高的反照率来看,土卫十六,土卫十七,土卫十和土卫十一可能是多孔的冰质天体。(注解:对于这些数值还有很多不能确定。)
收起全文
精华内容
参与话题
  • prometheus简介

    千次阅读 2018-09-18 21:09:22
    一、prometheus简介 1.1 什么是prometheus prometheus是一个最初在SoundCloud上构建的开源系统监控和警报工具包 。 从2012年开始,许多公司和组织开始使用Prometheus,该项目拥有非常活跃的开发人员和用户社区。 ...

    一、prometheus简介

    1.1 什么是prometheus

    prometheus是一个最初在SoundCloud上构建的开源系统监控和警报工具包 。
    从2012年开始,许多公司和组织开始使用Prometheus,该项目拥有非常活跃的开发人员和用户社区。
    目前它是一个独立的开源项目,并且不依赖与任何公司。
    为了强调这一点,并澄清项目的治理结构,Prometheus在2016年加入Cloud Native Computing Foundation,作为kubernetes之后的第二个托管项目。

    1.2 主要特征

    • 多维数据模型(时序列数据有metric和一组key/value组成)
    • 在多维度上灵活的查询语言(PromQl)
    • 不依赖分布式存储,单主节点工作.
    • 可以通过pushgateway进行时序列数据推送(pushing)
    • 可以通过服务发现或者静态配置去获取要采集的目标服务器
    • 多种可视化图表及仪表盘支持

    1.3 组件及架构

    组件

    prometheus生态系统由多个组件组成,其中许多组件是可选的。

    • promethues server:主要获取和存储时间序列数据
    • exporters:主要是作为agent收集数据发送到prometheus server,不同的数据收集由不同的exporters实现,如监控主机有node-exporters,mysql有MySQL server exporters。更多exporters
    • pushgateway:允许短暂和批处理的jobs推送它们的数据到prometheus;由于这类工作的存在时间不够长,所以需要他们主动将数据推送到pushgateway,然后由pushgateway将数据发送的prometheus。
      总结:类似于zabbix proxy
    • alertmanager:实现prometheus的告警功能。

    架构

    该图说明了Prometheus及其生态系统组件的一些架构

    这里写图片描述

    prometheus 直接或通过pushgateway抓取数据。将数据存储在本地,并对这些数据运行规则,以便从现有数据聚合和记录新时间序列,或者生成警报。grafana等可用于可视化数据。

    二、安装server

    2.1下载prometheus

    下载最新版,然后解压它

    # wget https://github.com/prometheus/prometheus/releases/download/v2.3.1/prometheus-2.3.1.linux-amd64.tar.gz
    # tar xvfz prometheus-*.tar.gz
    # cd prometheus-*

    ./prometheus --help使用该命令查看帮助

    2.2 配置prometheus

    配置文件为prometheus.yml,删除注释后配置文件如下

    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    
    rule_files:
      # - "first.rules"
      # - "second.rules"
    
    scrape_configs:
      - job_name: prometheus
        static_configs:
          - targets: ['localhost:9090']

    该配置文件有三个模块:global、rule_files、scrape_configs
    1. global:prometheus的全局配置,主要有两个属性

     scrape_interval:控制多久一次收集目标数据 ​ 
     evaluation_interval:评估规则时间间隔
    

    2. rule_files

    指定加载规则的位置 
    

    3. scrape_configs

    配置prometheus监视的数据。
    默认的job prometheus监控着prometheus公开的数据,数据是通过url:http://localhost:9090/metrics 来抓取的。
    返回的时间序列数据说明了prometheus server的状态信息。
    

    2.3 运行prometheus

    ./prometheus --config.file=prometheus.yml

    通过 http://ip:9090访问,现在页面上可以看到prometheus server的数据

    可以通过http://ip:9090/metrics验证prometheus server是否提供自身数据

    三、安装exporters

    node exporter与prometheus server安装在同一台主机上

    3.1 下载exporter

    以node exporter为例,下载最新的node exporter

    # wgethttps://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
    # tar xvfz node_exporter-*.tar.gz
    # cd node_exporter-*

    node exporter用户收集各种基于主机的度量。默认情况下,收集CPU、内存、磁盘

    3.2 启动 exporter

    ./node_exporter

    Node Exporter的metrics使用主机的9100端口和/metrics路径。在本实例中的路径为:http://localhost:9100/metrics

    3.3 配置监控

    配置prometheus以监控主机

    在prometheus server的配置文件prometheus.yml中增加如下job代码

    - job_name: node
      static_configs:
        - targets: ['localhost:9100']   # 替换为监控主机的ip地址或域名

    重启prometheus server

    使用浏览器访问http://ip:9090,在界面的execute旁边的下拉列表中,可以看到node_开头的度量指标,这些就是node_exporter收集的数据。

    一个有用的指标是up指标。该up度量标准可用于跟踪目标的状态。如果该度量标准具有值,1则目标的scrape成功,如果0失败。这可以帮助您指示目标的状态。

    Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。主要监控:

    • Node:如主机CPU,内存,网络吞吐和带宽占用,磁盘I/O和磁盘使用等指标。node-exporter采集。
    • 容器关键指标:集群中容器的CPU详细状况,内存详细状况,Network,FileSystem和Subcontainer等。通过cadvisor采集。
    • Kubernetes集群上部署的应用:监控部署在Kubernetes集群上的应用。主要是pod,service,ingress和endpoint。通过black-box和kube-apiserver的接口采集。

    prometheus自身提供了一些资源的自动发现功能,下面是我从官方github上截图,罗列了目前提供的资源发现:
    图片描述
    由上图可知prometheus自身提供了自动发现kubernetes的监控目标的功能。相应,配置文件官方也提供了一份,今天我们就解读一下该配置文件。

    配置文件解读

    首先直接上官方的配置文件:

    # A scrape configuration for running Prometheus on a Kubernetes cluster.
    # This uses separate scrape configs for cluster components (i.e. API server, node)
    # and services to allow each to use different authentication configs.
    #
    # Kubernetes labels will be added as Prometheus labels on metrics via the
    # `labelmap` relabeling action.
    #
    # If you are using Kubernetes 1.7.2 or earlier, please take note of the comments
    # for the kubernetes-cadvisor job; you will need to edit or remove this job.
    
    # Scrape config for API servers.
    #
    # Kubernetes exposes API servers as endpoints to the default/kubernetes
    # service so this uses `endpoints` role and uses relabelling to only keep
    # the endpoints associated with the default/kubernetes service using the
    # default named port `https`. This works for single API server deployments as
    # well as HA API server deployments.
    scrape_configs:
    - job_name: 'kubernetes-apiservers'
    
      kubernetes_sd_configs:
      - role: endpoints
    
      # Default to scraping over https. If required, just disable this or change to
      # `http`.
      scheme: https
    
      # This TLS & bearer token file config is used to connect to the actual scrape
      # endpoints for cluster components. This is separate to discovery auth
      # configuration because discovery & scraping are two separate concerns in
      # Prometheus. The discovery auth config is automatic if Prometheus runs inside
      # the cluster. Otherwise, more config options have to be provided within the
      # <kubernetes_sd_config>.
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        # If your node certificates are self-signed or use a different CA to the
        # master CA, then disable certificate verification below. Note that
        # certificate verification is an integral part of a secure infrastructure
        # so this should only be disabled in a controlled environment. You can
        # disable certificate verification by uncommenting the line below.
        #
        # insecure_skip_verify: true
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    
      # Keep only the default/kubernetes service endpoints for the https port. This
      # will add targets for each API server which Kubernetes adds an endpoint to
      # the default/kubernetes service.
      relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: default;kubernetes;https
    
    # Scrape config for nodes (kubelet).
    #
    # Rather than connecting directly to the node, the scrape is proxied though the
    # Kubernetes apiserver.  This means it will work if Prometheus is running out of
    # cluster, or can't connect to nodes for some other reason (e.g. because of
    # firewalling).
    - job_name: 'kubernetes-nodes'
    
      # Default to scraping over https. If required, just disable this or change to
      # `http`.
      scheme: https
    
      # This TLS & bearer token file config is used to connect to the actual scrape
      # endpoints for cluster components. This is separate to discovery auth
      # configuration because discovery & scraping are two separate concerns in
      # Prometheus. The discovery auth config is automatic if Prometheus runs inside
      # the cluster. Otherwise, more config options have to be provided within the
      # <kubernetes_sd_config>.
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    
      kubernetes_sd_configs:
      - role: node
    
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics
    
    # Scrape config for Kubelet cAdvisor.
    #
    # This is required for Kubernetes 1.7.3 and later, where cAdvisor metrics
    # (those whose names begin with 'container_') have been removed from the
    # Kubelet metrics endpoint.  This job scrapes the cAdvisor endpoint to
    # retrieve those metrics.
    #
    # In Kubernetes 1.7.0-1.7.2, these metrics are only exposed on the cAdvisor
    # HTTP endpoint; use "replacement: /api/v1/nodes/${1}:4194/proxy/metrics"
    # in that case (and ensure cAdvisor's HTTP server hasn't been disabled with
    # the --cadvisor-port=0 Kubelet flag).
    #
    # This job is not necessary and should be removed in Kubernetes 1.6 and
    # earlier versions, or it will cause the metrics to be scraped twice.
    - job_name: 'kubernetes-cadvisor'
    
      # Default to scraping over https. If required, just disable this or change to
      # `http`.
      scheme: https
    
      # This TLS & bearer token file config is used to connect to the actual scrape
      # endpoints for cluster components. This is separate to discovery auth
      # configuration because discovery & scraping are two separate concerns in
      # Prometheus. The discovery auth config is automatic if Prometheus runs inside
      # the cluster. Otherwise, more config options have to be provided within the
      # <kubernetes_sd_config>.
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    
      kubernetes_sd_configs:
      - role: node
    
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
    
    # Scrape config for service endpoints.
    #
    # The relabeling allows the actual service scrape endpoint to be configured
    # via the following annotations:
    #
    # * `prometheus.io/scrape`: Only scrape services that have a value of `true`
    # * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need
    # to set this to `https` & most likely set the `tls_config` of the scrape config.
    # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
    # * `prometheus.io/port`: If the metrics are exposed on a different port to the
    # service then set this appropriately.
    - job_name: 'kubernetes-service-endpoints'
    
      kubernetes_sd_configs:
      - role: endpoints
    
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
        action: replace
        target_label: __scheme__
        regex: (https?)
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        action: replace
        target_label: kubernetes_name
    
    # Example scrape config for probing services via the Blackbox Exporter.
    #
    # The relabeling allows the actual service scrape endpoint to be configured
    # via the following annotations:
    #
    # * `prometheus.io/probe`: Only probe services that have a value of `true`
    - job_name: 'kubernetes-services'
    
      metrics_path: /probe
      params:
        module: [http_2xx]
    
      kubernetes_sd_configs:
      - role: service
    
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
        action: keep
        regex: true
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox-exporter.example.com:9115
      - source_labels: [__param_target]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        target_label: kubernetes_name
    
    # Example scrape config for probing ingresses via the Blackbox Exporter.
    #
    # The relabeling allows the actual ingress scrape endpoint to be configured
    # via the following annotations:
    #
    # * `prometheus.io/probe`: Only probe services that have a value of `true`
    - job_name: 'kubernetes-ingresses'
    
      metrics_path: /probe
      params:
        module: [http_2xx]
    
      kubernetes_sd_configs:
        - role: ingress
    
      relabel_configs:
        - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
          regex: (.+);(.+);(.+)
          replacement: ${1}://${2}${3}
          target_label: __param_target
        - target_label: __address__
          replacement: blackbox-exporter.example.com:9115
        - source_labels: [__param_target]
          target_label: instance
        - action: labelmap
          regex: __meta_kubernetes_ingress_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_ingress_name]
          target_label: kubernetes_name
    
    # Example scrape config for pods
    #
    # The relabeling allows the actual pod scrape endpoint to be configured via the
    # following annotations:
    #
    # * `prometheus.io/scrape`: Only scrape pods that have a value of `true`
    # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
    # * `prometheus.io/port`: Scrape the pod on the indicated port instead of the
    # pod's declared ports (default is a port-free target if none are declared).
    - job_name: 'kubernetes-pods'
    
      kubernetes_sd_configs:
      - role: pod
    
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
        action: replace
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: kubernetes_pod_name
    

    当然该配置文件,是在prometheus部署在k8s中生效的,即in-cluster模式。

    kubernetes-apiservers

    该项主要是让prometheus程序可以访问kube-apiserver,进而进行服务发现。看一下服务发现的代码可以看出,主要服务发现:node,service,ingress,pod。

        switch d.role {
        case "endpoints":
            var wg sync.WaitGroup
    
            for _, namespace := range namespaces {
                elw := cache.NewListWatchFromClient(rclient, "endpoints", namespace, nil)
                slw := cache.NewListWatchFromClient(rclient, "services", namespace, nil)
                plw := cache.NewListWatchFromClient(rclient, "pods", namespace, nil)
                eps := NewEndpoints(
                    log.With(d.logger, "role", "endpoint"),
                    cache.NewSharedInformer(slw, &apiv1.Service{}, resyncPeriod),
                    cache.NewSharedInformer(elw, &apiv1.Endpoints{}, resyncPeriod),
                    cache.NewSharedInformer(plw, &apiv1.Pod{}, resyncPeriod),
                )
                go eps.endpointsInf.Run(ctx.Done())
                go eps.serviceInf.Run(ctx.Done())
                go eps.podInf.Run(ctx.Done())
    
                for !eps.serviceInf.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                for !eps.endpointsInf.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                for !eps.podInf.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                wg.Add(1)
                go func() {
                    defer wg.Done()
                    eps.Run(ctx, ch)
                }()
            }
            wg.Wait()
        case "pod":
            var wg sync.WaitGroup
            for _, namespace := range namespaces {
                plw := cache.NewListWatchFromClient(rclient, "pods", namespace, nil)
                pod := NewPod(
                    log.With(d.logger, "role", "pod"),
                    cache.NewSharedInformer(plw, &apiv1.Pod{}, resyncPeriod),
                )
                go pod.informer.Run(ctx.Done())
    
                for !pod.informer.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                wg.Add(1)
                go func() {
                    defer wg.Done()
                    pod.Run(ctx, ch)
                }()
            }
            wg.Wait()
        case "service":
            var wg sync.WaitGroup
            for _, namespace := range namespaces {
                slw := cache.NewListWatchFromClient(rclient, "services", namespace, nil)
                svc := NewService(
                    log.With(d.logger, "role", "service"),
                    cache.NewSharedInformer(slw, &apiv1.Service{}, resyncPeriod),
                )
                go svc.informer.Run(ctx.Done())
    
                for !svc.informer.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                wg.Add(1)
                go func() {
                    defer wg.Done()
                    svc.Run(ctx, ch)
                }()
            }
            wg.Wait()
        case "ingress":
            var wg sync.WaitGroup
            for _, namespace := range namespaces {
                ilw := cache.NewListWatchFromClient(reclient, "ingresses", namespace, nil)
                ingress := NewIngress(
                    log.With(d.logger, "role", "ingress"),
                    cache.NewSharedInformer(ilw, &extensionsv1beta1.Ingress{}, resyncPeriod),
                )
                go ingress.informer.Run(ctx.Done())
    
                for !ingress.informer.HasSynced() {
                    time.Sleep(100 * time.Millisecond)
                }
                wg.Add(1)
                go func() {
                    defer wg.Done()
                    ingress.Run(ctx, ch)
                }()
            }
            wg.Wait()
        case "node":
            nlw := cache.NewListWatchFromClient(rclient, "nodes", api.NamespaceAll, nil)
            node := NewNode(
                log.With(d.logger, "role", "node"),
                cache.NewSharedInformer(nlw, &apiv1.Node{}, resyncPeriod),
            )
            go node.informer.Run(ctx.Done())
    
            for !node.informer.HasSynced() {
                time.Sleep(100 * time.Millisecond)
            }
            node.Run(ctx, ch)
    
        default:
            level.Error(d.logger).Log("msg", "unknown Kubernetes discovery kind", "role", d.role)
        }   

    kubernetes-nodes

    发现node以后,通过/api/v1/nodes/${1}/proxy/metrics来获取node的metrics。

    kubernetes-cadvisor

    cadvisor已经被集成在kubelet中,所以发现了node就相当于发现了cadvisor。通过 /api/v1/nodes/${1}/proxy/metrics/cadvisor采集容器指标。

    kubernetes-services和kubernetes-ingresses

    该两种资源监控方式差不多,都是需要安装black-box,然后类似于探针去定时访问,根据返回的http状态码来判定service和ingress的服务可用性。
    PS:不过我自己在这里和官方的稍微有点区别,

    - target_label: __address__
          replacement: blackbox-exporter.example.com:9115

    官方大致是需要我们要创建black-box 的ingress从外部访问,这样从效率和安全性都不是最合适的。所以我一般都是直接内部dns访问。如下

    - target_label: __address__
          replacement: blackbox-exporter.kube-system:9115

    当然看源码可以发现,并不是所有的service和ingress都会健康监测,如果需要将服务进行健康监测,那么你部署应用的yaml文件加一些注解。例如:
    对于service和ingress:
    需要加注解:prometheus.io/scrape: 'true'

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
      name: prometheus-node-exporter
      namespace: kube-system
      labels:
        app: prometheus
        component: node-exporter
    spec:
      clusterIP: None
      ports:
        - name: prometheus-node-exporter
          port: 9100
          protocol: TCP
      selector:
        app: prometheus
        component: node-exporter
      type: ClusterIP

    kubernetes-pods

    对于pod的监测也是需要加注解:

    • prometheus.io/scrape,为true则会将pod作为监控目标。
    • prometheus.io/path,默认为/metrics
    • prometheus.io/port , 端口

    所以看到此处可以看出,该job并不是监控pod的指标,pod已经通过前面的cadvisor采集。此处是对pod中应用的监控。写过exporter的人应该对这个概念非常清楚。通俗讲,就是你pod中的应用提供了prometheus的监控功能,加上对应的注解,那么该应用的metrics会定时被采集走。

    kubernetes-service-endpoints

    对于服务的终端节点,也需要加注解:

    • prometheus.io/scrape,为true则会将pod作为监控目标。
    • prometheus.io/path,默认为/metrics
    • prometheus.io/port , 端口
    • prometheus.io/scheme 默认http,如果为了安全设置了https,此处需要改为https

    这个基本上同上的。采集service-endpoints的metrics。

    个人认为:如果某些部署应用只有pod没有service,那么这种情况只能在pod上加注解,通过kubernetes-pods采集metrics。如果有service,那么就无需在pod加注解了,直接在service上加即可。毕竟service-endpoints最终也会落到pod上。

    总结

    配置项总结

    • kubernetes-service-endpoints和kubernetes-pods采集应用中metrics,当然并不是所有的都提供了metrics接口。
    • kubernetes-ingresses 和kubernetes-services 健康监测服务和ingress健康的状态
    • kubernetes-cadvisor 和 kubernetes-nodes,通过发现node,监控node 和容器的cpu等指标

    自动发现源码

    参考client-go和prometheus自动发现k8s,这种监听k8s集群中资源的变化,使用informer实现,不要轮询kube-apiserver接口。

    展开全文
  • Prometheus的介绍与实践

    万次阅读 2018-10-15 14:47:17
    一、Prometheus简介 Prometheus是一套开源的系统监控报警框架。Prometheus作为新一代的云原生监控系统,相比传统监控监控系统(Nagios或者Zabbix)拥有如下优点。 易管理性 Prometheus: Prometheus核心部分只有一...

    一、Prometheus简介

    Prometheus是一套开源的系统监控报警框架。Prometheus作为新一代的云原生监控系统,相比传统监控监控系统(Nagios或者Zabbix)拥有如下优点。
    易管理性
    Prometheus: Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
    Nagios: 需要有专业的人员进行安装,配置和管理,并且过程很复杂。
    业务数据相关性
    Prometheus:监控服务的运行状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。
    Nagios:大部分的监控能力都是围绕系统的一些边缘性的问题,主要针对系统服务和资源的状态以及应用程序的可用性。
    另外Prometheus还存在以下优点
    高效:单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点。
    易于伸缩:通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中。
    良好的可视化:Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。

    二、Prometheus框架的组成和工作流

    2.1 Prometheus的框架组成
    Prometheus的框架如下图(参考自Prometheus官网
    在这里插入图片描述
    Prometheus Server:Prometheus Sever是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储及查询。Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Sever需要对采集到的数据进行存储,Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。
    Exporters:Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:
    直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
    间接采集:原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。
    AlertManager:在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产生一条告警。在AlertManager从 Prometheus server 端接收到 alerts后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,webhook 等。
    PushGateway:Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行中转。通过PushGateway将内部网络的监控数据主动Push到Gateway中,Prometheus Server采用针对Exporter同样的方式,将监控数据从PushGateway pull到Prometheus Server。

    2.2 Prometheus的工作流
    1.Prometheus server定期从配置好的jobs或者exporters中拉取metrics,或者接收来自Pushgateway发送过来的metrics,或者从其它的Prometheus server中拉metrics。
    2.Prometheus server在本地存储收集到的metrics,并运行定义好的alerts.rules,记录新的时间序列或者向Alert manager推送警报。
    3.Alertmanager根据配置文件,对接收到的警报进行处理,发出告警。
    4.在图形界面中,可视化采集数据。

    三、Prometheus的安装和配置

    3.1 Prometheus的安装
    Prometheus的安装有两种方式:1.从官网下载Prometheus镜像进行安装;2.从 docker上获取镜像进行安装。
    从官网下载Prometheus镜像进行安装

    wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz
    tar txvf prometheus-2.3.2.linux-amd64.tar.gz
    cd prometheus-2.3.2.linux-amd64.tar.gz
    ./prometheus --config.file=prometheus.yml
    

    从Docker获取镜像进行安装

    docker pull prom/prometheus
    

    3.2 Prometheus的配置
    Prometheus运行的命令配置参考如下

    docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \      
                             -v /tmp/first.rules:/etc/prometheus/first.rules \      
                              -v /tmp/prometheus-data:/prometheus-data \      
                               prom/prometheus
    

    备注:Prometheus在运行过程中会出现各种不同的bug,关于bug的问题和解决方案可以参考博客Prometheus配置过程中出现的bug及解决方案
    Prometheus配置文件的规范和解析
    Prometheus的配置文件采用的是yaml文件,yaml文件书写规范要求如下
    1.大小写敏感
    2.使用缩进表表示层级关系
    3.缩进时不允许使用tab键,只允许使用空格
    4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    Prometheus的配置文件解析如下:

    # Prometheus全局配置项
    global:
      scrape_interval:     15s # 设定抓取数据的周期,默认为1min
      evaluation_interval: 15s # 设定更新rules文件的周期,默认为1min
      scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
      external_labels: # 额外的属性,会添加到拉取得数据并存到数据库中
       monitor: 'codelab_monitor'
    
    
    # Alertmanager配置
    alerting:
     alertmanagers:
     - static_configs:
       - targets: ["localhost:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口
         
    # rule配置,首次读取默认加载,之后根据evaluation_interval设定的周期加载
    rule_files:
     - "alertmanager_rules.yml"
     - "prometheus_rules.yml"
    
    # scape配置
    scrape_configs:
    - job_name: 'prometheus' # job_name默认写入timeseries的labels中,可以用于查询使用
      scrape_interval: 15s # 抓取周期,默认采用global配置
      static_configs: # 静态配置
      - targets: ['localdns:9090'] # prometheus所要抓取数据的地址,即instance实例项
    
    - job_name: 'example-random'
      static_configs:
      - targets: ['localhost:8080']
    

    Prometheus模块定义的告警规则如下

    groups:
     - name: test-rules
       rules:
       - alert: InstanceDown # 告警名称
         expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
         for: 2m # 满足告警条件持续时间多久后,才会发送告警
         labels: #标签项
          team: node
         annotations: # 解析项,详细解释告警信息
          summary: "{{$labels.instance}}: has been down"
          description: "{{$labels.instance}}: job {{$labels.job}} has been down "
          value: {{$value}}
    

    参考:
    1.prometheus官网
    2.Prometheus操作指南
    3.Prometheus 入门与实践
    4.Prometheus 和 Alertmanager实战配置
    5.使用Prometheus+grafana打造高逼格监控平台

    展开全文
  • 本套课程由浅入深地对Prometheus进行了全方位的介绍,内容通俗易懂,理论与实践相结合。首先从监控体系讲起,介绍了关于监控的各种经典理论和方法。然后循序渐进地介绍了Prometheus的各个功能组件和配置方法,包括...
  • 一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,...
  • 首先从零开始教你搭建Prometheus + Grafana 监控系统。接下来,学习Prometheus主要功能,例如标签、服务发现、PromQL、强大的告警功能,定制告警模板等知识点,然后配合官方提供的组件,进行讲解并且运用于实际。并...
  • Prometheus

    2019-06-09 16:15:11
    wget https://github.com/prometheus/prometheus/releases/download/v2.5.0/prometheus 2.5.0.linux amd64.tar.gz tar xf prometheus 2.5.0.linux amd64.tar....cp prometheus 2.5.0.linux amd64/{ prometheus,pro...

    安装在server03 - 192.168.174.137

    wget https://github.com/prometheus/prometheus/releases/download/v2.5.0/prometheus 2.5.0.linux amd64.tar.gz
    
    tar xf prometheus 2.5.0.linux amd64.tar.gz
    
    cp prometheus 2.5.0.linux amd64/{ prometheus,promtool } usr /local/
    
    查看版本
    prometheus version
    
    cd prometheus 2.5.0.linux amd64
    
    cp prometheus.yml prometheus.yml.orig
    
    mkdir p /etc/prometheus
    
    cp prometheus.yml /etc/prometheus
    
    promtool check config /etc/prometheus/prometheus.yml
    
    启动
    prometheus --config.file /etc/prometheus/prometheus.yml
    
    

    开始体验
    在这里插入图片描述

    node_exporter

    下载

    tar xf node_exporter-0.18.1.linux-amd64.tar.gz
    cd node_exporter-0.18.1.linux-amd64/
    cp node_exporter /usr/local/bin/

    查看版本

    root@server03:~/media/prometheus/node_exporter-0.18.1.linux-amd64# node_exporter --version
    node_exporter, version 0.18.1 (branch: HEAD, revision: 3db77732e925c08f675d7404a8c46466b2ece83e)
      build user:       root@b50852a1acba
      build date:       20190604-16:41:18
      go version:       go1.12.5
    

    配置 文本文件收集器
    注:文本文件收集器,默认是加载的,我们只需要指定目录collector.textfile.directory

    启用 system 收集器
    采用collector.systemd.unit whitelist =“.+“ ,使用正则表达式

    运行节点导出器
    默认监听端口9100
    nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" > node_exporter.out 2>&1 &

    root@server03:~# netstat -antpl | grep 9100
    tcp6       0      0 :::9100                 :::*                    LISTEN      74704/node_exporter
    
    
    mkdir -p /var/lib/node_exporter/textfile_collector
    
    echo 'metadata{role="docker_server",datacenter ="NJ"} 1' | tee /var/lib/node_exporter/textfile_collector/metadata.prom
    
    启动
    nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" > node_exporter.out 2>&1 &
    
    
    

    在 prometheus 服务器配置 scrap
    vim /etc/prometheus/prometheus.yml
    在这里插入图片描述
    在服务器上过滤收集器
    https://raw.githubusercontent.com/aishangwei/prometheus-demo/master/prometheus/prometheus.yml
    注:使用 params 参数配合 collect ,过滤想要的数据

    /etc/prometheus/prometheus.yml

    - job_name: 'node'
        static_configs:
        - targets: ['192.168.174.137:9100']
        params:
          collect[]:
            - cpu
            - meminfo
            - diskstats
    

    查看meminfo
    node_memory_MemFree_bytes
    硬盘信息
    node_disk_writes_merged_total
    cpu info
    node_cpu_seconds_total
    在这里插入图片描述

    展开全文
  • Prometheus入门实践

    2019-09-08 23:54:25
    Prometheus下载地址Prometheus相关文档Prometheus官方文档 一、基本原理 通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。 输出被监控组件信息的HTTP接口被叫做exporter,也...

    官方链接

    Prometheus下载地址Prometheus相关文档Prometheus官方文档

    一、基本原理

    通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。

    输出被监控组件信息的HTTP接口被叫做exporter,也就是数据采集端,通常来说,最需要接入改造的就是expoter. 当前互联网上已经有很多成熟的exporter组件,当然用户也可用根据官方提供的sdk自行编写exporter.

    注意:prometheus的时间序列数据分为四种类型

    • Counter: 收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量,错误总数等
    • Gauge: 搜集的数据是一个瞬时的,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等
    • Histogram: 用于表示一段时间范围内对数据进行采样,并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。
    • Summary: 和Histogram类似,用于表示一段时间内数据采样结果。它直接存储了 quantile 数据,而不是根据统计区间计算出来的

    二、组件介绍

    • 1.Prometheus-server: 负责数据采集和存储(TSDB),提供PromQL查询语言的支持
    • 2.Alertmanager: 警告管理器,用来进行报警
    • 3.Push Gateway: 支持临时性Job主动推送指标的中间网关(通常对应于短声明周期的任务监控)

    三、服务过程

    • 1.Prometheus Daemon定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给server进行定时获取。支持配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup方式抓取目标;对于长生命周期的服务,采用Pull模式定期拉取数据,对于段生命周期的任务,通过push-gateway来主动推送数据
    • 2.Prometheus本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
    • 3.Prometheus通过PromQL和其他API可视化地展示收集的数据. 可以作为Grafana的数据源进行图标输出,也可通过API对外提供数据展示
    • 4.PushGateway支持client主动推送metrics到push-gateway(相当于是一个常驻的exporter服务),prometheus定期去push-gateway中获取数据
    • 5.Alertmanager是独立于prometheus的一个组件,支持PromQL查询语句,提供灵活的报警功能

    四、pronetheus服务构建使用

    下载地址

    源码安装

    # 三个组件
    $ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz -O node_exporter-0.18.1.tar.gz
    
    $ wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz -O prometheus-2.10.0.linux-amd64.tar.gz
    
    $ wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz -O pushgateway-0.8.0.linux-amd64.tar.gz
    
    

    docker方式安装

    注意:prometheus默认使用yaml格式来定义配置文件

    # 编写prometheus默认配置文件
    $ cat prometheus.yml
    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    
    rule_files:
      # - "first.rules"
      # - "second.rules"
    
    scrape_configs:
      # 会在每个metrics数据中增加job="prometheus"和instance="localhost:9090"的基本数据
      - job_name: prometheus
        static_configs:
          - targets: ['localhost:9090']
    
    # 热启动prometheus服务
    $ docker run --name=prometheus -d -p 9090:9090  -v /Users/xuxuebiao/Desktop/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
    
    $ docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    5e1698a320b2        prom/prometheus     "/bin/prometheus -..."   3 days ago          Up 2 minutes        0.0.0.0:9090->9090/tcp   prometheus
    
    

    注意: prometheus为golang编写的程序,因此只有一个二进制文件,使用--config.file来制定配置文件,使用--web.enable-lifecycle来启用远程热加载配置文件. 调用指令curl -X POST http://localhost:9090/-/reload

    此时可以访问prometheus-web即可查看prometheus的状态页面。此时它会每30s对自己暴露的http metrics数据进行采集。可以访问prometheus本身的metrics数据

    prometheus-graph

    prometheus-metrics

    prometheus-当前收集上来的指标项

    go-info指标

    单metrics指标数据

    通过node exporter提供metrics

    # 启动node-exporter
    $ docker run -d --name=node-exporter -p 9100:9100  prom/node-exporter
    $ docker ps -l
    CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                    NAMES
    0f60bcce1ea6        prom/node-exporter   "/bin/node_exporter"   3 days ago          Up 42 seconds       0.0.0.0:9100->9100/tcp   node-exporter
    # 查看服务暴露的metrics
    $ curl http://localhost:9100/metrics
    
    # 将配置暴露给prometheus,并重载prometheus
    $ cat prometheus.yml
    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    
    rule_files:
      # - "first.rules"
      # - "second.rules"
    
    scrape_configs:
      - job_name: prometheus
        static_configs:
          - targets: ['localhost:9090']
                # 增加一个target 并附加一个label来标记该metrics
          # 注意:在prometheus启动时增加了一些参数,因此target不需要写协议和uri(http和/metrics)
          - targets: ['10.13.13.60:9100']
            labels:
              group: "client-node-exporter"
    
    
    # prometheus服务重载
    $ curl -X POST http://localhost:9090/-/reload
    

    node-exporter数据采集到prometheus

    node-exporter采集的15分钟平均负载

    注意:如果需要同时查找多个项,其实需要熟悉prometheus的表达式编写

    五、安装pushgateway

    注意:push-gateway服务启动后也需要将endpoint加入prometheus中

    # 启动push-gateway服务
    docker run -d -p 9091:9091 --name pushgateway prom/pushgateway
    
    # 查看push-gateway服务
    $ curl localhost:9091
    
    # 测试push一条metrics数据到Push-gateway
    echo "tps 100" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    
    # 多指标推送
    cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/xxb/instance/bgbiao
    tps{label="xxb"} 8800
    tps1 100
    tps2 160
    tps3 160
    EOF
    

    push-gateway服务

    prometheus增加push-gateway

    push-gateway采集上来的数据

    prometheus上查看push-gateway上报的数据

    六、安装Grafana进行图标展示

    # 创建grafana服务
    $ docker run -d -p 3000:3000 --name grafana grafana/grafana
    
    $ curl localhost:3000

    添加数据源,以及基本数据验证

    # 向prometheus的push-gateway上主动push数据模拟数据上报
    ➜  Desktop echo "tps 10" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    ➜  Desktop echo "tps 9" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    ➜  Desktop echo "tps 20" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    ➜  Desktop echo "tps 30" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    ➜  Desktop echo "tps 310" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    ➜  Desktop echo "tps 222" | curl --data-binary @- http://localhost:9091/metrics/job/xxb
    

    grafana数据源配置

    grafana查看prometheus中收集的metrics数据

    七、安装AlterManager

    Prometheus中的告警由独立的两部分组成

    • 1.Prometheus服务中的警告规则发送警告到Alertmanager
    • 2.Alertmanager管理这些警告.包含:silencing, inhibition, aggregation 并通过一些方式发送通知

    建立告警和通知的基本步骤:

    • 1.创建和配置alertmanager
    • 2.启动prometheus服务时,通过alertmanager.url 配置报警服务alertmanager服务,prometheus和alertmanager通信连接

    启动altermanager服务

    # 编辑alertmanager配置文件
    $cat alertmanager.yml
    global:
      resolve_timeout: 5m
    route:
      group_by: ['cqh']
      group_wait: 10s #组报警等待时间
      group_interval: 10s #组报警间隔时间
      repeat_interval: 1m #重复报警间隔时间
      receiver: 'web.hook'
    receivers:
      - name: 'web.hook'
        webhook_configs:
          - url: 'http://10.13.118.71:8889/open/test'
    inhibit_rules:
      - source_match:
          severity: 'critical'
        target_match:
          severity: 'warning'
        equal: ['alertname', 'dev', 'instance']
    
    # 启动服务
    $ docker run -d -p 9093:9093 --name alertmanager -v /Users/xuxuebiao/Desktop/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
    
    $ docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    c6ba74bfd03b        prom/alertmanager   "/bin/alertmanager..."   3 days ago          Up 7 seconds        0.0.0.0:9093->9093/tcp   alertmanager
    

    alertmanager服务

    在prometheus中配置altermanager服务

    # 编辑rule配置
    $ cat rules.yml
    groups:
      # tps 超过150 并且持续10s就报警告通知
      - name: bgbiao
        rules:
          - alert: bgbiao测试
            expr: tps > 150
            for: 10s
            labels:
              status: warning
            annotations:
              summary: "{{$labels.instance}}:tps 超过阈值150."
              description: "{{$labels.instance}}:tps 超过阈值!. 当前值: {{ $value }}"
    
    
    
    # 修改prometheus主配置文件
    $ cat prometheus.yml
    global:
      # 默认抓取时间间隔为15s
      scrape_interval:     15s
      # 计算rule的间隔
      evaluation_interval: 15s
      # 定义额外的label
      external_labels:
        monitor: "bgbiao-monitor"
    
    rule_files:
      - /etc/prometheus/rules.yml
      # - "first.rules"
      # - "second.rules"
    
    # 抓取对象
    scrape_configs:
      - job_name: prometheus
        # 重写数据抓取时间(局部生效)
        scrape_interval: 5s
        static_configs:
          - targets: ['localhost:9090']
            labels:
              group: "prom"
          - targets: ['10.13.118.71:9100']
            labels:
              group: "node-exporter"
          - targets: ['10.13.118.71:9091']
            labels:
              group: "push-gateway"
    
    # 配置报警对象
    alerting:
      alertmanagers:
        - static_configs:
            - targets: ["10.13.118.71:9093"]
    

    重载prometheus服务

    curl -X POST http://localhost:9090/-/reload
    

    重新导入数据测试

    # 循环向push-gateway推送数据
    $ cat test-abc.sh
    #!/bin/bash
    #Author_by:Andy_xu @JR-OPS
    num=`date  %s | cut -c10-13`
    metrics=`date  %s | cut -c${num}-13`
    echo $metrics
    echo "tps $metrics" | curl --data-binary @- http://localhost:9091/metrics/job/xxb

    模拟报警数据

    alertmanager中显示的报警规则

    prometheus中已出现红色报警

    prometheus报警详细内容

    八、后续优化

    注意: 此时使用prometheus可以监控到基础服务的资源使用情况,并且也可用借用alertmanager服务对相关报警规则进行检测和报警,那么需要如何把相关报警及时的通知到相关负责人呢。我们前面在alertmanager服务中配置了一个web-hook,即http://10.13.118.71:8889/open/test,可以在alertmanager服务的status中找到。我们可以很好的借助这个web-hook来对相关的报警发送。

    # 一个临时用来测试的web-hook服务
    $ cat test-web-hook.go
    /**
     * @File Name: test-web-hook.go
     * @Author: xxbandy @http://xxbandy.github.io
     * @Email:
     * @Create Date: 2019-06-19 14:06:48
     * @Last Modified: 2019-06-19 15:06:13
     * @Description: 一个临时用来测试的web-hook服务
     * @build:
     GOOS=darwin GOARCH=amd64 CGO_ENABLED=0  build -ldflags '-w -s' -o prometheus-web-hook test-web-hook.go
     */
    
    package main
    import (
        "github.com/gin-gonic/gin"
        "net/http"
        "io/ioutil"
        "fmt"
    )
    
    
    func main() {
       router := gin.Default()
       router.GET("/open/test", CollectData)
       router.POST("/open/test", CollectData)
    
       router.Run(":8889")
    
    }
    
    func CollectData(c *gin.Context) {
        alertdata,_ := ioutil.ReadAll(c.Request.Body)
        fmt.Println(string(alertdata))
        c.JSON(http.StatusOK,nil)
    
    }
    
    # 构建成二进制文件
    $ GOOS=darwin GOARCH=amd64 CGO_ENABLED=0  build -ldflags '-w -s' -o prometheus-web-hook test-web-hook.go
    $ chmod a x prometheus-web-hook
    
    # 运行web-hook并收集报警信息
    ➜  ./prometheus-web-hook
    [GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.
    
    [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
    
    [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
     - using env:    export GIN_MODE=release
     - using code:    gin.SetMode(gin.ReleaseMode)
    
    [GIN-debug] GET    /open/test                --> main.CollectData (3 handlers)
    [GIN-debug] POST   /open/test                --> main.CollectData (3 handlers)
    [GIN-debug] Listening and serving HTTP on :8889
    {"receiver":"web\\.hook","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"bgbiao测试","exported_job":"xxb","group":"push-gateway","instance":"10.13.118.71:9091","job":"prometheus","monitor":"bgbiao-monitor","status":"warning"},"annotations":{"description":"10.13.118.71:9091:tps 超过阈值!. 当前值: 26986","summary":"10.13.118.71:9091:tps 超过阈值150."},"startsAt":"2019-06-19T06:17:19.247257311Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://5e1698a320b2:9090/graph?g0.expr=tps > 150\u0026g0.tab=1"}],"groupLabels":{},"commonLabels":{"alertname":"bgbiao测试","exported_job":"xxb","group":"push-gateway","instance":"10.13.118.71:9091","job":"prometheus","monitor":"bgbiao-monitor","status":"warning"},"commonAnnotations":{"description":"10.13.118.71:9091:tps 超过阈值!. 当前值: 26986","summary":"10.13.118.71:9091:tps 超过阈值150."},"externalURL":"http://c6ba74bfd03b:9093","version":"4","groupKey":"{}:{}"}
    
    [GIN] 2019/06/19 - 15:24:10 | 200 |     727.873µs |    10.13.118.71 | POST     /open/test
    {"receiver":"web\\.hook","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"bgbiao测试","exported_job":"xxb","group":"push-gateway","instance":"10.13.118.71:9091","job":"prometheus","monitor":"bgbiao-monitor","status":"warning"},"annotations":{"description":"10.13.118.71:9091:tps 超过阈值!. 当前值: 26986","summary":"10.13.118.71:9091:tps 超过阈值150."},"startsAt":"2019-06-19T06:17:19.247257311Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://5e1698a320b2:9090/graph?g0.expr=tps > 150\u0026g0.tab=1"}],"groupLabels":{},"commonLabels":{"alertname":"bgbiao测试","exported_job":"xxb","group":"push-gateway","instance":"10.13.118.71:9091","job":"prometheus","monitor":"bgbiao-monitor","status":"warning"},"commonAnnotations":{"description":"10.13.118.71:9091:tps 超过阈值!. 当前值: 26986","summary":"10.13.118.71:9091:tps 超过阈值150."},"externalURL":"http://c6ba74bfd03b:9093","version":"4","groupKey":"{}:{}"}
    
    [GIN] 2019/06/19 - 15:25:20 | 200 |     129.897µs |    10.13.118.71 | POST     /open/test

    注意:我们这里的web-hook服务其实是将报警信息临时全部打印出来了,其实可以根据用户关心程度,将相关值取出来直接发送至用户终端,比如钉钉,微信,或者短信欢迎关注我的公众号Wechat.jpeg

    展开全文
  • prometheus搭建

    千次阅读 2019-05-29 16:32:44
    Prometheus是继Kubernetes后第2个正式加入CNCF基金会的项目,容器和云原生领域事实的监控标准解决方案。 Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年...
  • Prometheus 搭建监控系统

    千次阅读 2019-08-27 19:57:15
    Prometheus是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提SoundCloud,这是一个在线音乐分享的平台,类似于做视频分享的 YouTube,由于他们在微服务架构的道路上越走越远,出现了成百上千的...
  • 监控神器-普罗米修斯Prometheus的安装

    万次阅读 2018-09-06 15:44:05
    最近看了些AIOPS的资料,对于里面提及的一个普罗米修斯Prometheus起了兴趣,首先是联想到异形,哈哈。去看了一下,普罗米修斯还真是厉害,而且还是开源的,真是搬砖党的福音。 功能: 在业务层用作埋点系统 ...
  • prometheus的简介和安装 Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发者和用户社区。它...
  • Prometheus浅析

    千次阅读 2018-09-05 19:10:25
    1.Prometheus是什么?  Prometheus(下文称Prom) 是由 SoundCloud 开源监控告警解决方案,与Kubernetes同属CNCF,它已经成为炙手可热的Kubernetes生态圈中的核心监控系统,越来越多的项目(如Kubernetes和etcd等 ...
  • 常用prometheus告警规则模板(三).md

    万次阅读 2020-04-21 17:30:18
    应用类相关 1.监控应用是否可用 规则模板 : up=${value} 规则描述: 监测应用是否可用 参数说明: value:0表示宕机1表示可用 ...-alert:InstanceDown#检测job的状态,持续1分钟metrices不能访问会...
  • prometheus修改数据保留时间

    千次阅读 2019-11-20 14:16:13
    –storage.tsdb.retention
  • prometheus + grafana 实时监控 Windows性能

    万次阅读 2018-11-21 10:41:12
    Prometheus Windows安装Prometheus 简介Prometheus 具有以下特点Prometheus 组件Prometheus功能特性在业务层用作埋点系统在应用层用作应用监控系统在系统层用作系统监控集成其他的监控Prometheus官方架构图下载...
  • 安装好prometheus以后,访问的默认端口号是9090,通常不需要修改。但有时候情况特殊,需要把默认端口号改为自定义端口,例如改为8091,该如何操作? 一般情况,prometheus有两种安装运行方式:容器方式和虚机...
  • docker运行prometheus

    千次阅读 2018-10-16 23:42:29
    pull镜像 docker pull prom/prometheus:latest ...-v /tmp/prometheus-data:/prometheus-data \ prom/prometheus 如果要映射配置文件 docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc...
  • Prometheus容器reload config

    千次阅读 2018-05-03 16:28:58
    Prometheus容器reload config 按照之前的文章在kubernetes环境下部署好prometheus之后,监控进程正常运行。现在问题来了:prometheus的配置内容是configmap配置的,更新configmap之后如何让prometheus进程重新...
  • prometheus-es-exporter

    千次阅读 2020-01-17 18:15:44
    prometheus-es-exporter参照前文安装prometheus安装prometheus-es-exporter配置exporter.cfg方式一:运行prometheus-es-exporter方式二:运行prometheus-es-exporter验证-查看metrics验证-查看prometheus target验证...
  • prometheus使用Alertmanager预警(邮件)

    万次阅读 2017-09-14 10:35:59
    1. Prometheus 安装 源码安装: # wget https://github.com/prometheus/prometheus/releases/download/v1.7.1/prometheus-1.7.1.linux-amd64.tar.gz # tar zxvf prometheus-1.7.1.linux-amd64.tar.gz # cd ...
1 2 3 4 5 ... 20
收藏数 20,213
精华内容 8,085
关键字:

prometheus