exporters

作者: aneirin | 来源:发表于2019-01-24 11:02 被阅读0次

    将这篇文档命名为exporters,是因为其内容主要对github.com上的常用”***_exporters“做简单介绍。
    依赖这些exporters可以监控运维工作中的方方面面。exporters产生监控数据,然后时序数据库比如Prometheus来存储数据,Grafana来展示数据。这一套系统已非常成熟,应用越来越广泛。exporters高度可定制,Prometheus可对数据做展示前的预处理,这些灵活的操作使得搭建一套适合自己的监控系统变得非常容易。

    • script_exporter
      如果有若干的脚本要执行,这些脚本非常的重要,当发现执行失败时,要第一时间通知,那么这个exporter可以帮到你。它会收集所要监控脚本的执行结果和执行花费的时间。
      创建配置文件:
    scripts:
      - name: success
        script: sleep 5
      - name: failure
        script: sleep 2 && exit 1
      - name: timeout
        script: sleep 5
        timeout: 1
    

    配置文件定义了三个脚本,关键字name和script是必需的,timeout为可选参数,如果没有指定,默认是15s。
    运行程序如果从源码直接编译而来,配置文件可以通过选项“--config.file”传入。运行程序后,浏览器访问http://localhost:9172/probe?name=success , 显示如下:
    script_duration_seconds{script="success"} 5.012201
    script_success{script="success"} 1
    这里有两个metric,以脚本名做label,方便区分。第一个为脚本执行花费的时间(单位为秒),第二个是脚本执行的返回结果:1表示执行成功,0表示执行失败。这里需要注意的是,默认脚本是在/bin/sh中执行的,如果要使用/bin/bash,请使用选项“--config.shell”将其传入。

    • snmp_exporter
      工作中经常要对服务器或交换机的端口流量进行监控,snmp_exporter利用snmp采集目标设备的监控数据,它能采集的数据有很多,在这里只关注对交换机端口流量数据的采集。
      操作之前,首先要确定需walk的OID,可以查询OID数据库。和端口流量相关的OID一个为1.3.6.1.2.1.2.2.1.10,代表下行字节数(理解是否正确?),一个为1.3.6.1.2.1.2.2.1.16,代表上行字节数。端口流量表示的是一秒内通过的bit数,查看这两个OID的解释:Total number of octets received/transmitted on the interface, including framing characters。好像并不能直接拿来使用,先不用管它。
      下载二进制程序,创建配置文件snmp.yml,这个文件官方建议使用generator来生成它,这里使用现成的,内容如下:
    switch:
      walk:
      - 1.3.6.1.2.1.2.2.1.10
      - 1.3.6.1.2.1.2.2.1.16
      metrics:
      - name: ifInOctets
        oid: 1.3.6.1.2.1.2.2.1.10
        type: counter
        indexes:
        - labelname: ifIndex
          type: gauge
      - name: ifOutOctets
        oid: 1.3.6.1.2.1.2.2.1.16
        type: counter
        indexes:
        - labelname: ifIndex
          type: gauge
      auth:
        community: public
    

    启动程序:./snmp_exporter,现在访问采集到的数据http://主机IP:/snmp?target=192.168.1.1&module=switch,显示如下:

    # HELP ifInOctets
    # TYPE ifInOctets counter
    ifInOctets{ifIndex="1"} 0
    ifInOctets{ifIndex="10"} 2.816132638e+09
    ifInOctets{ifIndex="11"} 1.612220009e+09
    ifInOctets{ifIndex="12"} 2.875516929e+09
    ...
    

    这里有相当多的Metric,Label为ifIndex,后面的数字表示到目前为止统计到的字节数。有了这些数据计算指定端口实时流量就很容易,可参考Prometheus的配置
    生产环境中使用的查询表达式:
    rate(ifInOctets{ifIndex="25",instance="10.1.16.1",job="switch"}[3m])*8 //乘以8是将单位化为bit/s

    • blackbox_exporter
      依赖这个exporter可以实时监控Web服务的状态,支持http和https,它还可以采集TCP、DNS、ICMP、SMTP相关的数据。
      下面是一个配置文件的样例(仅针对http prober)
      blackbox.yml:
    modules:
      http_2xx:
        prober: http
        timeout: 5s
        http:
          valid_http_versions: ["HTTP/1.1", "HTTP/2"]
          valid_status_codes: []  # Defaults to 2xx
          method: GET
          headers:
            Host: www.baidu.com
            Accept-Language: zh-CN
          no_follow_redirects: false
          fail_if_not_ssl: true
          fail_if_not_matches_regexp:
              - "Copyright"        #这里的内容是和Response的内容匹配的
          tls_config:
              insecure_skip_verify: false
          preferred_ip_protocol: "ip4" # defaults to "ip6"
    

    因为要测试的target使用的协议是https,所以这里加了"fail_if_not_ssl: true"。配置文件的路径通过参数“--config.file”传入。
    启动程序后,访问链接http://主机IP:9115/probe?target=https://www.baidu.com&module=http_2xx,输出如下:

    # HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
    # TYPE probe_dns_lookup_time_seconds gauge
    probe_dns_lookup_time_seconds 0.079595676
    # HELP probe_duration_seconds Returns how long the probe took to complete in seconds
    # TYPE probe_duration_seconds gauge
    probe_duration_seconds 0.128873101
    # HELP probe_failed_due_to_regex Indicates if probe failed due to regex
    # TYPE probe_failed_due_to_regex gauge
    probe_failed_due_to_regex 0
    # HELP probe_http_content_length Length of http content response
    # TYPE probe_http_content_length gauge
    probe_http_content_length -1
    # HELP probe_http_duration_seconds Duration of http request by phase, summed over all redirects
    # TYPE probe_http_duration_seconds gauge
    probe_http_duration_seconds{phase="connect"} 0.002813787
    probe_http_duration_seconds{phase="processing"} 0.008696127
    probe_http_duration_seconds{phase="resolve"} 0.079595676
    probe_http_duration_seconds{phase="tls"} 0.015958782
    probe_http_duration_seconds{phase="transfer"} 0.024328814
    # HELP probe_http_redirects The number of redirects
    # TYPE probe_http_redirects gauge
    probe_http_redirects 0
    # HELP probe_http_ssl Indicates if SSL was used for the final redirect
    # TYPE probe_http_ssl gauge
    probe_http_ssl 1
    # HELP probe_http_status_code Response HTTP status code
    # TYPE probe_http_status_code gauge
    probe_http_status_code 200
    # HELP probe_http_version Returns the version of HTTP of the probe response
    # TYPE probe_http_version gauge
    probe_http_version 1.1
    # HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6
    # TYPE probe_ip_protocol gauge
    probe_ip_protocol 4
    # HELP probe_ssl_earliest_cert_expiry Returns earliest SSL cert expiry in unixtime
    # TYPE probe_ssl_earliest_cert_expiry gauge
    probe_ssl_earliest_cert_expiry 1.554275906e+09
    # HELP probe_success Displays whether or not the probe was a success
    # TYPE probe_success gauge
    probe_success 1
    

    输出的内容非常丰富,响应内容是否符合预期告诉你,而且将HTTP连接的各个阶段耗时清晰的显示出来,TLS的话,将证书的过期时间也一并返回给你。
    probe_ssl_earliest_cert_expiry 1.554275906e+09,这是unix timestamp转换成可读时间是: 2019年4月3日星期三下午3点18分。
    这里注意URL参数部分如果target的值没有写协议的话,默认是http。

    • node_exporter
      它是github上得星最多的exporter,确实实至名归。node_exporter可以采集的服务器信息非常多,你能想到的,差不多它都给你准备好了。
      因为要收集主机系统的信息,官方建议采用非容器的方式部署。实验测试,为方便起见,使用了容器部署的方式,生产环境灵活变动。
      采用容器方式部署时,可以参考下面的docker-compose.yml:
    version: '3'
    services:
        blackbox_exporter:
            image: prom/node-exporter:latest
            command: ["--path.rootfs","/host","--no-collector.bcache","--no-collector.edac","--no-collector.entropy","--no-collector.infiniband","--no-collector.ipvs","--no-collector.hwmon","--no-collector.mdadm","--no-collector.textfile","--no-collector.timex","--no-collector.xfs","--no-collector.zfs"]
            volumes:
                - '/:/host:ro,rslave'
            ports:
                - '9100:9100/tcp'
            network_mode: "host"
            pid: "host"
    

    根据运行主机的实际情况,禁用或使能相应的Collector(Collector具体功能介绍参看官方文档)。
    启动容器后,访问链接http://主机IP:9100/metrics,可以看到非常多的Metric。这里对比较常用的Collector做简要分析。

    1. conntrack:重要的metric为“node_nf_conntrack_entries”,值为“/proc/sys/net/netfilter/nf_conntrack_count”
    2. cpu:数据来源为“/proc/stat”
    3. diskstats:数据来源为“/proc/diskstats”
    4. filesystem:通过“/proc/1/mounts”得到系统已挂载文件系统的详情,然后依赖包syscall中的函数Statfs得到文件系统的使用情况
    5. meminfo:数据来源为“/proc/meminfo”
    6. netdev:数据来源为“/proc/net/dev”

    相关文章

      网友评论

          本文标题:exporters

          本文链接:https://www.haomeiwen.com/subject/fnkyjqtx.html