Prometheus로 munin에서 마이그레이션을 검토 ⑤ ~ 마이그레이션 검토 그 2 ~

전회까지 서버 자원, Nginx, phpfpm의 감시가 어느 정도 되어 있는 상태입니다.
여기에서는 각종 경고 메일을 설정해 갑니다.

규칙 구축



종류로서는 다음을 준비
- cpu.yml
- disk.yml
- memory.yml
- nginx.yml
- php-fpm.yml
- system.yml(인스턴스 다운 및 로드 평균)

잘 보는 부분만으로 경고 대상으로 보았습니다.

알림 메일 샘플



아래의 설정으로 메일 통지를 모두 체크하고 있는 것은 아닙니다.
애초에, 탐구이므로 실수는 있다고 생각합니다.

cpu



- name: cpu_check
  rules:
  - alert: cpu_used_warn
    # CPU 使用率が 80% を超えた時を条件にしています
    expr: 100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance)) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "cpu used over 80%"
      description: "CPU使用率が80%を超えて5分経過してます"
  - alert: cpu_used_err
    # CPU 使用率が 90% を超えた時を条件にしています
    expr: 100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance)) > 90
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "cpu used over 90%"
      description: "CPU使用率が90%を超えて5分経過してます"

덧붙여서 메일은 다음과 같은 느낌으로 통지되었습니다.

※IP 나와 있습니다만 로컬 IP이고, prometheus의 확인용이므로 좋을까라고.

disk



사실은 "/"고정이 아니고 sum을 사용해 역치를 마련하고 싶었지만 잘 할 수 없었습니다.

groups:
- name: disk_check
  rules:
  - alert: disk_space_warn
    expr: node_filesystem_avail{mountpoint='/', device!~'rootfs'} / node_filesystem_size * 100 < 30
    for: 5m
    labels:
      severity: warnings
    annotations:
      summary: "running out of hard drive space"
      description: "ディスクスペースが70%をきってから5分経過してます"
  - alert: disk_space_warn
    expr: node_filesystem_avail{mountpoint='/', device!~'rootfs'} / node_filesystem_size * 100 < 20
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "running out of hard drive space"
      description: "ディスクスペースが80%をきってから5分経過してます"

memory



groups:
- name: memory_check
  rules:
  - alert: memory_warn
    expr: 100 * ((node_memory_MemFree + node_memory_Active_file + node_memory_Inactive_file)/node_memory_MemTotal) < 30
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "memory is getting low"
      description: "メモリ空き容量が30%以下になって5分経過してます"
  - alert: memory_critical
    expr: 100 * ((node_memory_MemFree + node_memory_Active_file + node_memory_Inactive_file)/node_memory_MemTotal) < 20
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "memory is getting low"
      description: "メモリ空き容量が20%以下になって5分経過してます"

nginx



액티브한 접속수로 역치를 마련해 보았습니다.
값도 보고 싶기 때문에 {$labels.value}도 사용하고 있습니다.

groups:
- name: nginx_check
  rules:
  - alert: status
    expr: nginx_up == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "nginx down"
      description: "nginxが停止してから5分が経過してます"
  - alert: active_connections_warn
    expr: nginx_connections_current{state="active"} > 700
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "active connection over 700"
      description: "nginxでアクティブなコネクションが700を超えて5分経過してます 値={{ $labels.value }}"
  - alert: active_connections_critical
    expr: nginx_connections_current{state="active"} > 900
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "active connection over 900"
      description: "nginxでアクティブなコネクションが900を超えて5分経過してます 値={{ $labels.value }}"

phpfpm



nginx와 비슷한 느낌으로 만들었습니다.

groups:
- name: phpfpm_check
  rules:
  - alert: process_count_warn
    expr: phpfpm_active_max_processes > 700
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: " process over 700"
      description: "phpfpmのプロセスが700を超えて5分経過してます 値={{ $labels.value }}"
  - alert: process_count_critical
    expr: phpfpm_active_max_processes > 900
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "process over 900"
      description: "phpfpmのプロセスが900を超えて5分経過してます 値={{ $labels.value }}"

시스템



인스턴스 다운뿐입니다만, 「node_load1」등을 사용해 로드 애버리지도 대상으로 해 가고 싶다.

groups:
- name: system_check
  rules:
  # alert: アラート名
  - alert: InstanceDown
    # expr: alert push の閾値
    expr: up == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Instance down"
      description: "停止してから5分が経過してます"

요약



서두에 기재되어 있는 대로, 모두 체크한 것은 아닙니다.
어디까지나 샘플로서 확인해 실제로 감시 툴로서 활용하는 경우는,
확인하고 설정을 결정합니다.

대충 만져 본 결과, munin으로부터 이행해도 좋을까라고 생각했습니다.
grafana는 보고 즐겁고 경고 제어가 역시 강한 것 같았다.
다만, alertmanager의 warning과 critical의 집계를 잘 할 수 없고,
양쪽 통지되어 버리므로 거기는 확인해 가고 싶다.

좋은 웹페이지 즐겨찾기