TICK Stack을 통한 모니터링 환경 구축(Telegraf+InflumxDB+Chronogaf+Kapacitor)

개요


최소한의 설정으로 TICK Stack 구축
TICK은 다음 Inflexdb 수정influxdata 도구 그룹으로 구성된 Stack인 것 같습니다.
  • T - Telegraf – Data collection
  • I - InfluxDB – Data storage
  • C - Chronograf – Data visualization
  • K - Kapacitor – Data processing
  • 구성은 다음과 같다

    ※ 공식 홈페이지를 통해

    컨디션


    AWS에서 서버 2대 준비
  • ip-172-31-17-95 : Influxdb, Kapacitor, Chronograf
  • ip-172-31-17-94 : Telegraf
  • 버전은 다음과 같습니다.
  • CentOS release 6.7 (Final)
  • InfluxDB v0.10.0 (Beta)
  • Telegraf v0.10.0
  • Kapacitor v0.2.4
  • Chronograf v0.4
  • 다양한 설치


    InflexDB 설치
    $ wget https://influxdb.s3.amazonaws.com/influxdb-0.10.0-0.beta1.x86_64.rpm
    $ sudo yum localinstall influxdb-0.10.0-0.beta1.x86_64.rpm
    
    Telegraf 설치
    $ wget http://get.influxdb.org/telegraf/telegraf-0.10.0-1.x86_64.rpm
    $ sudo yum localinstall telegraf-0.10.0-1.x86_64.rpm
    
    Kapacitor 설치
    $ wget https://s3.amazonaws.com/influxdb/kapacitor-0.2.4-1.x86_64.rpm
    $ sudo yum localinstall kapacitor-0.2.4-1.x86_64.rpm
    
    Chronograf 설치
    $ wget https://s3.amazonaws.com/get.influxdb.org/chronograf/chronograf-0.4.0-1.x86_64.rpm
    $ sudo yum localinstall chronograf-0.4.0-1.x86_64.rpm
    

    InflexDB 설치


    어쨌든 기본적으로 시작합니다.
    $ sudo /etc/init.d/influxdb start
    

    Telegraf 설치

  • InflumxDB 서버 지정
  • percpu를 무효화
  • $ sudo vi /etc/telegraf/telegraf.conf
    
    urls = ["http://172.31.17.95:8086"]
    
    [[inputs.cpu]]
      percpu = false
    
    
    Telegraf 시작
    $ sudo /etc/init.d/telegraf start
    
    기본 모니터링 설정은 다음과 같습니다.
    measurement
    field
    cpu
    time_guest, time_guest_nice time_idle, time_iowait, time_irq, time_nice, time_softirq, time_steal, time_system, time_user, usage_guest, usage_guest_nice, usage_idle, usage_iowait, usage_irq, usage_nice, usage_softirq, usage_steal, usage_system, usage_user
    disk
    free, fstype, inodes_free, inodes_total, inodes_used, path, total, used
    diskio
    io_time name, read_bytes, read_time, reads, serial, write_bytes, write_time, writes
    mem
    available, available_percent, buffered, cached, free, total, used, used_percent
    swap
    free, in, out, total, used, used_percent
    system
    load1, load15, load5
    ※ 위의 양도를 10초마다 인플렉스 DB로 output

    Kapacitor 설정


    이메일 알림 사용
    $ sudo vi /etc/kapacitor/kapacitor.conf
    
    /etc/kapacitor/kapacitor.conf
    [smtp]
      enabled = true                   #有効化
      host = "127.0.0.1"
      port = 25
      username = ""
      password = ""
      from = "[email protected]"     #送信元アドレス
      to = ["****@*************"]      #アラートメール通知先
      no-verify = false
      idle-timeout = "30s"
    
    Kapacitor 시작
    $ sudo /etc/init.d/kapacitor start
    
    경고 설정
    tick 스크립트 만들기
    cpu_alert.tick
    stream
        .from().measurement('cpu')
        .alert()
                    .warn(lambda: "usage_idle" < 30)  #idle 30%以下で warning
                    .crit(lambda: "usage_idle" < 10)  #idle 30%以下で critical
            .email()                                  #email 通知
    
    task 투입
    $ kapacitor define -name cpu_alert -type stream -dbrp telegraf.default -tick cpu_alert.tick
    
    task의 유효성
    $ kapacitor enable cpu_alert
    
    감시 대상의 규격이 비교적 낮기 때문에, 가벼운 부하를 더한 후 대량의 우편물이 날아올 것이다

    메일의 테마에서 호스트 이름 부분이nil이기 때문에 수정해야 합니다
    flaping도 귀찮아요. 어떻게든 해결할게요.
    경보 조정
  • TagKey group화(host, cpu)
  • 창 정의 증가(60초당 60초 획득)
  • warn,crit60초 동안의 데이터 중 어느 것이 조건에 부합되면alert에 투척
  • stateChangesonly 추가(상태가 바뀔 때만 적용)
  • ID 추가 (메일 테마에 사용할 메시지 {{.ID}is{.Level}}})
  • cpu_alert.tick
    stream
      .from().measurement('cpu')
        .groupBy('host','cpu')
        .window()
          .period(60s)
          .every(60s)
        .alert()
          .id('{{ index .Tags "host" }}/{{ index .Tags "cpu" }}')
          .warn(lambda: "usage_idle" < 30)
          .crit(lambda: "usage_idle" < 10)
          .stateChangesOnly()
          .email()
    
    task 재투입
    $ kapacitor define -name cpu_alert -type stream -dbrp telegraf.default -tick cpu_alert.tick
    
    확인
    $ kapacitor show cpu_alert
    Name: cpu_alert
    Error:
    Type: stream
    Enabled: true
    Executing: true
    Databases Retention Policies: ["telegraf"."default"]
    TICKscript:
    stream
      .from().measurement('cpu')
        .groupBy('host','cpu')
        .window()
          .period(60s)
          .every(60s)
        .alert()
          .id('{{ index .Tags "host" }}/{{ index .Tags "cpu" }}')
          .warn(lambda: "usage_idle" < 30)
          .crit(lambda: "usage_idle" < 10)
          .stateChangesOnly()
          .email()
    
    DOT:
    digraph cpu_alert {
    stream0 -> stream1 [label="12"];
    stream1 -> window2 [label="1"];
    window2 -> alert3 [label="0"];
    }
    
    task 일람표 얻기
    $ kapacitor list tasks
    Name                          Type      Enabled   Executing Databases and Retention Policies
    cpu_alert                     stream    true      true      ["telegraf"."default"]
    
    경고 메일 확인

    주의 사항
    tick 스크립트의 문법 오류는 define에서 검사된 오류입니다. 실행 중 오류가 발생하는task를 삽입하면panic가 떨어져서 시작할 수 없습니다
    이런 거.
    cpu_alert.tick
    stream
      .from().measurement('cpu')
        .window()
          .period(30s)
          .every(30s)
        .groupBy('host','cpu')
        .alert()
          .warn(lambda: "usage_idle" < 30)
          .crit(lambda: "usage_idle" < 10)
          .log('/tmp/cpu_alert.log'
    
    대응:task db 초기화 제거
    $ sudo rm /var/lib/kapacitor/tasks/task.db
    

    Chronograf 설정


    외부 액세스 허용
    $ sudo vi /opt/chronograf/config.toml
    
    Bind = "0.0.0.0:10000"
    
    Chronograf 시작
    $ sudo /etc/init.d/chronograf start
    
    http:/{서버 IP 주소}:10000 액세스

    Addnew server에서 NICKNAME을 적절하게 입력한 다음 Save

    New Graph에서 차트 이름을 설정하고 BUILDER를 사용하여 질의 작성
    telegraf로 얻은 cpu 도량의 도표

    다음에telegraf의 측정과kapacitor의 이벤트 처리를 깊이 있게 발굴할 것입니다

    좋은 웹페이지 즐겨찾기