zoukankan      html  css  js  c++  java
  • 监控实战Prometheus+Grafana

    这期的分享是监控实战,其实不想写这篇的,因为网上相关的文章也挺多的,但是出于光说不练都是假把式,而且也想告诉你:当帅气的普罗米修斯(Prometheus)遇到高颜值的格拉法纳(Grafana)究竟会擦出什么样的火花?所以忍不住还是想分享啊。

    640?wx_fmt=png

    为了实战,我们再次请出架构图,请注意图中红色圈 1 的部分,主要分两条线去实战。

    第一条战线:Prometheus 如何监控机器?

    采用标准的PGOne技术组件Prometheus Server + Grafana + node_exporter完成对机器的性能监控。

    第二条战线:Prometheus 如何监控 flink?

    采用技术组件client lib(flink-metrics-prometheus_x.jar) + PushGateway + Prometheus Server + Grafana完成对 flink 的监控。

    1. Prometheus 如何监控机器?

    工欲善其事必先利其器,先下载相关组件包。prometheus 提供了两种下载方式,第一种是二进制压缩包的方式,第二种是 docker 镜像的方式。

    #方式1:二进制压缩包下载链接	
    https://prometheus.io/download/	
    
    	
    #方式2:docker镜像链接	
    https://hub.docker.com/u/prom

    本次实战均采用 docker 镜像下载。

    docker pull prom/node-exporter	
    docker pull prom/prometheus	
    docker pull grafana/grafana
    

      

    下载完成成, 输入命令 docker images 列出本地主机上的镜像(由于pushgateway镜像之前在本机已经下载过,你如果第一次跟着做,应该看不到这个,后面操作会进行下载)。

    640?wx_fmt=png

    做好准备工作。

    #创建 grafana 数据存储目录	
    mkdir /opt/grafana-storage	
    #因为 grafana 会在这个目录写入文件,赋权限。	
    chmod 777 -R /opt/grafana-storage	
    #创建 prometheus 配置文件存放目录	
    mkdir /opt/prometheus/	
    #在 prometheus 配置文件目录下,创建prometheus.yml文件	
    vi /opt/prometheus/prometheus.yml	
    # prometheus.yml中配置静态监控对象 targets,输入如下配置内容(请注意修改 IP 为你的真实 IP):	
    global:	
      scrape_interval:     60s	
      evaluation_interval: 60s	
    
    	
    scrape_configs:	
      - job_name: prometheus	
        static_configs:	
          - targets: ['localhost:9090']	
            labels:	
              instance: 'prometheus'	
    
    	
      - job_name: linux	
        static_configs:	
          - targets: ['IP:9100']	
            labels:	
              instance: 'linux'
    

      

    准备就绪,逐个启动组件。

    # 启动 node-exporter	
    docker run -d -p 9100:9100  -v "/proc:/host/proc:ro"  -v "/sys:/host/sys:ro"  -v "/:/rootfs:ro"  --net="host"  prom/node-exporter	
    # 启动 prometheus	
    docker run -d -p 9090:9090  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus	
    # 启动 grafana	
    docker run -d -p 3000:3000  --name=grafana -v /opt/grafana-storage:/var/lib/grafana grafana/grafana
    

      

    确认一下是否都启动了,输入 docker ps -a 一探究竟。

    640?wx_fmt=png

    再次确认一下服务是否都 OK 了, 逐个访问一下。

    • node_exporter 访问输入 http://YOUR_CONF_IP:9100/metrics,效果如下

      640?wx_fmt=png

    • Prometheus 访问输入 http://YOUR_CONF_IP:9090/targets,效果如下

      640?wx_fmt=png

    • Grafana 访问输入 http://YOUR_CONF_IP:3000,效果如下

      640?wx_fmt=jpeg

    默认用户名密码 : admin/admin

    640?wx_fmt=jpeg

    点击 Add data source,选择 Prometheus。

    640?wx_fmt=jpeg

    配置url 输入Prometheus的 ip + 端口,然后点击 Save&Test 按钮,会提示Data source is working。

    640?wx_fmt=png

    回到首页,点击 New dashboard --> Add Query。

    640?wx_fmt=jpeg

    640?wx_fmt=jpeg

    Panel Title 下拉菜单选择 edit,输入指标会自动提示呦。

    640?wx_fmt=jpeg

    效果所见即所得。

    640?wx_fmt=jpeg

    到这儿,采用 Prometheus Server + Grafana + node_exporter 对机器性能指标监控的实战,就算演示操作完毕,点到为止,接下来看看 flink 监控如何集成。

    2. Prometheus 如何监控 flink?

    第一步:下载 pushgateway 镜像,并完成启动。

    # 下载 pushgateway 镜像	
    docker pull prom/pushgateway	
    
    	
    # 启动 pushgateway	
    docker run -d -p 9091:9091 prom/pushgateway
    

      

    第二步:在 prometheus.yml 中添加 pushgateway 的配置,用于告诉 Prometheus 监控 pushgateway,并重新启动 prometheus。

    global:	
      scrape_interval:     60s	
      evaluation_interval: 60s	
    
    	
    scrape_configs:	
      - job_name: prometheus	
        static_configs:	
          - targets: ['localhost:9090']	
            labels:	
              instance: 'prometheus'	
    
    	
      - job_name: linux	
        static_configs:	
          - targets: ['IP:9100']	
            labels:	
              instance: 'linux'	
      - job_name: 'pushgateway'	
        static_configs:	
          - targets: ['IP:9091']	
            labels:	
              instance: 'pushgateway'
    

      

    第三步:针对 flink 添加监控集成包,直接把 flink-1.8.1/opt 目录下的 flink-metrics-prometheus-1.8.1.jar 包复制一份到 flink-1.8.1/lib 目录下即可。

    第四步:然后在 flink 配置文件 flink-conf.yml 中添加如下内容(注意修改IP),启动 flink 即可。

    ##metrics	
    metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter	
    metrics.reporter.promgateway.host: YOUR_CONF_IP	
    metrics.reporter.promgateway.port: 9091	
    metrics.reporter.promgateway.jobName: myJob	
    metrics.reporter.promgateway.randomJobNameSuffix: true	
    metrics.reporter.promgateway.deleteOnShutdown: false
    

      

    第五步:回到 Grafana 首页,点击 New dashboard,创建一个新的 dashboard,选择 flink(注意如果没有出现 flink,那说明 flink 没有启动)。

    640?wx_fmt=jpeg

    选择并添加相关指标看一看。

    640?wx_fmt=jpeg

    好了,到这 Prometheus 监控 flink 也就完毕了,后续就是监控指标如何展示的更好的问题,不再赘述。

    3. 有钟意的 dashboard,Grafana 如何让她变成自己的?

    网站 https://grafana.com/grafana/dashboards 提供了一系列的模板,可供使用,那该如何导入到自己的 Grafana 下呢?

    第一步:选择钟意的 dashboard,获取对应的 dashboard 编号。

    640?wx_fmt=jpeg

    第二步:回到自己的 Grafana 首页,选择"+" --> Import

    640?wx_fmt=jpeg

    然后输入 Copy 的 dashboard 编号,点击 load。

    640?wx_fmt=jpeg

    效果所见即所得,高端大气上档次。

    640?wx_fmt=jpeg

    好了,帅气的 Prometheus 与高颜值的 Grafana 擦出的烟火就放到这儿吧。不过在结束之前,还是归拢一下本次演示遇到的问题吧,以供你参考。

    4. 问题集锦

     

    问题一:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    linux解决方案	
        systemctl daemon-reload	
        systemctl restart docker.service	
        	
    mac下直接启动 docker 服务就行了。
    

      

    问题二:Get http://localhost:9100/metrics: dial tcp [::1]:9100: connect: connection refused

    解决方案:修改 prometheus.yml 文件中 targets: ['localhost:PORT'] 中的 localhost:PORT 修改为真实 IP:PORT 就行了。

    问题三:启动 grafana 时始终失败。

    mkdir: cannot create directory '/var/lib/grafana/plugins': Permission denied	
    GF_PATHS_DATA='/var/lib/grafana' is not writable.	
    You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later
    

    解决方案:chmod 777 /opt/grafana-storage

    问题四:Prometheus 监控 flink 时,始终找不到 PrometheusPushGatewayReporter。

    java.lang.ClassNotFoundException: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
    

    解决方案:直接把 flink-1.8.1/opt 目录下的 flink-metrics-prometheus-1.8.1.jar 包复制一份到 flink-1.8.1/lib 目录下即可。

    5. 命令集锦

    docker pull prom/node-exporter  //拉取镜像	
    docker images //查看本机所有镜像	
    docker run ... //创建一个新的容器	
    docker stop $(docker ps -a -q)  //停止所有容器	
    docker rm $(docker ps -a -q) //删除所有容器	
    docker logs -f --tail=10 CONTAINER_ID //查看容器的最后10行的日志
    

      

    好了,每天进步一点点, 一年后你的进步将远远超乎你的想象。如果感觉文章有点意思,请多多分享转发吧。

  • 相关阅读:
    【原】文本图片自适应高度小bug以及解决办法
    【原】iOS学习39网络之数据请求
    【原】iOS学习38网络之数据解析
    iOS数据持久化文件读写之偏好设置
    SQLite错误码
    iOS开发代码规范(通用)
    iOS学习37数据处理之CoreData
    iOS中的单例
    iOS学习36数据处理之SQLite数据库
    UIImage两种初始化的区别
  • 原文地址:https://www.cnblogs.com/socoool/p/12629764.html
Copyright © 2011-2022 走看看