집안의 감시를 Zabbix에서 Proometheus로 바꾼 이야기

15932 단어 GrafanaPromtheustech

배경.


AWS re:invent
Amazon Managed Service for Grafana
Amazon Managed Service for Prometheus 발표 후
미리 이중화로 구성된 감시 기판을 간단하게 이용할 수 있다(왜냐하면
앞으로 어떤 접촉의 기회가 있을 수 있기 때문에 개인의 학습을 총결하였다.
감시 기반으로 현재까지 Zabbix 주로 개봉 환경에서 처리
인프라 시설 자체의 하락 여부 등 다른 설비부터 감시의 순환에 빠지는 경우가 많다
나는 일단 말을 꺼내면 끝도 없이 싫어진다고 생각한다.
AWS에 CloudWatch logs가 있는 반면
AWS가 와서 이 서비스를 발표했어요.
나는 사용자의 기대와 요구가 있기 때문에 발표한 것이라고 생각한다. (이것은 AWS이다)
실제로 만나보시면 보실 수 있을 것 같아요.
이번에는 집에 기계가 있기 때문에 그런 것들을 감시하고 싶어요.
OS를 모국어로 세밀하게 구축해도 원리를 이해할 수 있다는 것도 하나의 선택이다
관리 서비스 이용 = 설정에만 초점을 맞추고 싶어 Docker로 즐겁게 놀았다.
또한 시험 통지처에서도 슬랙과 다른 방법을 채택했다.
Zabbix의 비밀번호를 모르기 때문에 MySQL의 비밀번호 리셋 작업은 매우 번거롭기 때문에 좋은 기회라고 말하기 어렵다
Google Chat도 한순간에 목적지 알림 며칠 전의 장애 을 고려했지만, 의존이 좋지 않다고 생각합니다.

생성물


Grafana - dashboard


Grafana - dashboard

Prometheus - target


Prometheus - target

토대


Grafana(시각화)

  • Ubuntu 18.04.5 LTS
  • git version 2.17.1
  • Docker version 20.10.1, build 831ebea
  • Proometheus(감시 기초) + AlertManager(통지) + SNMP Exporter(SNMP 수집) + Blackbox-Exporter(외부 감시)

  • Ubuntu 18.04.5 LTS
  • git version 2.17.1
  • Docker version 20.10.1, build 831ebea
  • docker-compose version 1.27.4, build 40524192
  • 감시 대상


    Firewall

  • WatchGuard Firebox T-15-w
  • Router

  • Cisco C841M-4X-JSEC/K9
  • Switch

  • Cisco Catalyst 2960-L
  • Wireless AP

  • Cisco WAP125 Wireless-AC
  • Linux

  • CentOS7 - syslog server
  • node_exporter-1.0.1.linux-amd64.tar.gz
  • install & Settings
  • sudo groupadd -g 10001 prometheus
    sudo useradd -u 10001 -g 10001 -s /sbin/nologin -M prometheus
    wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
    sudo tar zxvf ./node_exporter-1.0.1.linux-amd64.tar.gz  -C /opt/
    cd /opt/
    sudo mv node_exporter-1.0.1.linux-amd64 node_exporter
    sudo chown -R prometheus:prometheus node_exporter/
    cd /etc/systemd/system/
    sudo vi prometheus-node-exporter.service
    ****************************************
    [Unit]
    Description=node_exporter for Prometheus
    
    [Service]
    Restart=always
    User=prometheus
    ExecStart=/opt/node_exporter/node_exporter
    ExecReload=/bin/kill -HUP $MAINPID
    TimeoutStopSec=20s
    SendSIGKILL=no
    
    [Install]
    WantedBy=multi-user.target
    ****************************************
    sudo systemctl daemon-reload
    sudo systemctl status prometheus-node-exporter.service
    sudo systemctl start prometheus-node-exporter.service
    sudo systemctl status prometheus-node-exporter.service
    sudo systemctl enable prometheus-node-exporter.service
    

    Windows

  • Windows Server 2019 - AD/DNS/DHCP
  • windows_exporter-0.15.0-amd64.msi
  • install & Settings
  • msiexec /i windows_exporter-0.15.0-amd64.msi ENABLED_COLLECTORS="ad,cpu,dhcp,dns,iis,net,os,logical_disk,memory" LISTEN_PORT=5000 TEXTFILE_DIR="C:\custom_metrics\"
    

    Grafana


    Docker


    sudo docker run -d --name=grafana -p 3000:3000 grafana/grafana:7.3.6-ubuntu
    

    Prometheus


    Docker


    폴더 구성


    myhome-prometheus
        └── src
            ├── alertmanager
            │   └── config.yml
            ├── blackbox_exporter
            │   └── config.yml
            ├── docker
            │   └── docker-compose.yml
            ├── prometheus
            │   ├── prometheus.yml
            │   └── rules.yml
            └── snmp_exporter
                └── snmp.yml
    

    Create Cotainers


    cd myhome-prometheus/src/docker
    pwd
    ls -l ./docker-compose.yml
    ls -l ../prometheus/prometheus.yml
    ls -l ../prometheus/rules.yml
    ls -l ../snmp_exporter/snmp.yml
    ls -l ../alertmanager/config.yml
    ls -l ../blackbox_exporter/config.yml
    sudo docker-compose up -d
    sudo docker-compose ps
    ******************************
          Name                     Command               State           Ports         
    -----------------------------------------------------------------------------------
    alertmanager        /bin/alertmanager --config ...   Up      0.0.0.0:9093->9093/tcp
    blackbox-exporter   /bin/blackbox_exporter --c ...   Up      0.0.0.0:9115->9115/tcp
    node-exporter       /bin/node_exporter               Up      0.0.0.0:9100->9100/tcp
    prometheus          /bin/prometheus --config.f ...   Up      0.0.0.0:9090->9090/tcp
    snmp-exporter       /bin/snmp_exporter --confi ...   Up      0.0.0.0:9116->9116/tcp
    *******************************
    

    docker-compose.yml


    version: '3'
    services:
      prometheus:
        image: prom/prometheus:v2.23.0
        container_name: prometheus
        volumes:
          - ../prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
          - ../prometheus/rules.yml:/etc/prometheus/rules.yml
        ports:
          - 9090:9090
        restart: always
      exporter:
        image: prom/node-exporter:v1.0.1
        container_name: node-exporter
        ports:
          - 9100:9100
        restart: always
      snmp-exporter:
        image: prom/snmp-exporter:v0.19.0
        container_name: snmp-exporter
        volumes:
          - ../snmp_exporter/snmp.yml:/etc/snmp_exporter/snmp.yml
        ports:
          - 9116:9116
        restart: always
      alertmanager:
        image: prom/alertmanager:v0.21.0
        container_name: alertmanager
        volumes:
          - ../alertmanager/config.yml:/etc/alertmanager/config.yml
        command: "--config.file=/etc/alertmanager/config.yml"
        ports:
          - 9093:9093
        restart: always
      blackbox-exporter:
        image: prom/blackbox-exporter:v0.18.0
        container_name: blackbox-exporter
        ports:
          - 9115:9115
        volumes:
          - ../blackbox_exporter/config.yml:/etc/blackbox_exporter/config.yml
    

    prometheus

  • prometheus.yml
  • # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
        - scheme: http
          static_configs:
          - targets:
            - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
        - rules.yml
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets:
            -  prometheus:9090
            -  node-exporter:9100
      - job_name: 'Linux'
        static_configs:
          - labels:
              type: linux
            targets:
            - 192.168.10.203:9100
      - job_name: 'Windows'
        static_configs:
          - labels:
              type: windows
            targets:
            - 192.168.10.220:5000
      - job_name: 'snmp-exporter'
        static_configs:
          - labels:
              type: cisco
            targets:
              - 192.168.10.1
              - 192.168.10.250
              - 192.168.10.253
        metrics_path: /snmp
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - source_labels: [type]
            target_label: __param_module
          - target_label: __address__
            replacement: snmp-exporter:9116
    
      - job_name: 'blackbox_icmp'
        metrics_path: /probe
        params:
          module: [icmp]
        static_configs:
          - targets:
            - 192.168.10.1
            - 192.168.10.150
            - 192.168.10.200
            - 192.168.10.202
            - 192.168.10.203
            - 192.168.10.220
            - 192.168.10.250
            - 192.168.10.251
            - 192.168.10.253
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: blackbox-exporter:9115
    
  • rules.yaml
  • 어쨌든 나는 우선 사활, 최소한의 감시를 감시하고 싶다.
    groups:
      - name: checkInstance
        rules:
        - alert: NodeInstanceDown
          expr: up{job='Linux'} == 0
          for: 30s
          labels:
            severity: critical
        - alert: pingInstance
          expr: up{job='blackbox_icmp'} == 0
          for: 2m
          labels:
            severity: critical
    

    alertmanager

  • config.yml
  • global:
      slack_api_url: 'https://hooks.slack.com/services/**********************t'
    
    route:
      receiver: 'slack'
    
    receivers:
      - name: 'slack'
        slack_configs:
        - channel: '#myhome'
    

    snmp-exporter


    우선 사과 기계의 MIB. 을 최소한의 확인으로 설정하다.
    또한 SNMP_Exporter의 창고도 수동 유지 보수가 아닙니다.
    표방은 첨부된generator에 의해 생성됩니다
    This file is not intended to be written by hand, rather use the generator to generate it for you.
  • snmp.yml
  • cisco:
      walk:
      - 1.3.6.1.2.1.2.2.1.16
      - 1.3.6.1.2.1.2.2.1.20
      - 1.3.6.1.2.1.31.1.1.1.1
      - 1.3.6.1.4.1.9.9.109.1.1.1.1.6
      metrics:
      - name: ifOutOctets
        oid: 1.3.6.1.2.1.2.2.1.16
        type: counter
        indexes:
        - labelname: ifName
          type: gauge
        lookups:
        - labels:
          - ifName
          labelname: ifName
          oid: 1.3.6.1.2.1.31.1.1.1.1
          type: DisplayString
      - name: ifOutErrors
        oid: 1.3.6.1.2.1.2.2.1.20
        type: counter
        indexes:
        - labelname: ifName
          type: gauge
        lookups:
        - labels:
          - ifName
          labelname: ifName
          oid: 1.3.6.1.2.1.31.1.1.1.1
          type: DisplayString
      - name: cpmCPUTotal5secRev
        oid: 1.3.6.1.4.1.9.9.109.1.1.1.1.6
        type: gauge
        indexes:
        - labelname: cpmCPUTotalIndex
          type: gauge
      version: 2
      auth:
        community: public
    

    blackbox-exporter

  • config.yml
  • 유용example.yml했기 때문에 생략합니다.
    수집 설정은 이것으로 끝냅니다🍵
    여기서부터는 promQL - Prometheus Query Language시간입니다.🆒

    데이터 참조 가져오기


    프로파일링은 이번이 처음입니다.
    RDB와 같은 데이터 추출에 뛰어나 머릿속에 SQL을 보충하는 동시에
    검색을 고려하여, 나는 추출한 그림이 하나 있다.

    1단계(Promaetheus)


    먼저 SNMP에서 얻은 데이터를 살펴보겠습니다.👀
    ifOutOctets ( = SELECT * FROM ifOutOctets ; )
    
    第1段階

    2단계(Promaetheus)


    사용하지 않은 인터페이스(값 0)가 방해가 되네요.😣
    ifOutOctets > 0   ( = SELECT * FROM ifOutOctets WHERE value > 0 ; )
    
    第2段階

    3단계(Promaetheus)


    인터페이스와 장치에 집중하고 싶네요.😋
    sum by ( ifName, instance ) ( ifOutOctets > 0 )   ( = SELECT ifName, instance  FROM ifOutOctets WHERE value > 0  GROUP BY ifName, instance ; )
    
    第3段階

    4단계(Promaetheus)


    기계에 조건을 붙일 수 있을까요?😆
    sum by ( ifName, instance ) ( ifOutOctets{instance="192.168.10.1"} > 0 )  ( = SELECT ifName, instance  FROM ifOutOctets WHERE value > 0  AND instance = '192.168.10.1' GROUP BY ifName, instance ; )
    
    第4段階

    5단계(Grafana 상)


    일단 자신의 마음속에 좋은 느낌을 형성하면, 그라파나에서 패널을 만든다.📈
    第5段階
    이런 형식으로 프로파일링QL을 조립했습니다.
    다른 것은 우선 핑이 응답했을 때의 조회 등도 다음과 같이 기재되어 있다.
    count ( probe_success{ job="blackbox_icmp" } )
    
    count

    모니터링 알림


    자기 집이라 사활을 감시하는 게 좋을 것 같아서 낮춘 뒤에도 문제 없이 알림을 확인했다.
    slack

    총결산


    이번 주말 오후를 이용해 단숨에 착수했다.
    Promaetheus와 주변 이미지 간의 통신, configuration 주위에 오류가 발생했기 때문에
    가동 전에도 처리됐지만, 집 내 감시 기반을 안전하게 바꿀 수 있었다.
    이번에는 자기 집 시사회라서 인터넷도 확정됐어요.
    기계도 알기 때문에 설정이 쉽다
    CNCF 졸업 프로그램 2018년 이후
    접촉할 기회는 없었지만 이번에 먼저 체험할 수 있는 기회가 생겨서 정말 다행입니다.
    왜냐하면 공식 문서에서 기본적으로 커튼을 설정하는 방법도 있기 때문이다
    나는 먼저 집에서 경험을 쌓은 후에 클라우드 현지의 감시 방법을 배우고 싶다.
    나는 마침내 구름의 트레이닝 셔츠로 한 걸음 내디뎠다고 생각한다.
    AWS EC2
    _meta_ec2_tag: each tag value of the instance
    __meta_ec2_vpc_id: the ID of the VPC in which the instance is running, if available
    GCP GCE
    _meta_gce_label: each GCE label of the instance
    __meta_gce_project: the GCP project in which the instance is running
    __meta_gce_subnetwork: the subnetwork URL of the instance
    __meta_gce_tags: comma separated list of instance tags

    기타


    AWS re:inventCable Detective를 제거했지만 72시간 동안 연락이 없었다.
    이번re:Invent 한정 트렌치코트는 받을 수 있다고 들었는데 이미 받을 수 없죠...😣

    좋은 웹페이지 즐겨찾기