서버 구성
1.모니터링 서버 : Influxdb + grafana +kapacitor 서버 1대 (같은 서버에 install / 분리도 가능)
* Recommend Spec
– CPU 4 Core 이상
– Memory 8G 이상
– HDD 50G 이상
(influxDB 특성상 (모니터링 interval time 비례한 DB R/W 발생, 가능하다면 SSD 추천)
위 스펙은 모니터링 대상 메트릭수,대상 노드수, 일별 write 되는 data용량, 모니터링 간격, 모니터링 로그 보관주기 등에 따라 결정 되어야함 (소규모, 대규모에 따라 시스템 사이징은 천차만별)
참고 사이트 : https://docs.influxdata.com/influxdb/v0.10/guides/hardware_sizing/
2. OS : Linux (CentOS or Ubuntu) 가급적이면 최신 버전 사용 (메뉴얼은 Ubuntu 기반으로 설명 예정)
lInfluxDB 구성 (Ubuntu 14.04.2 LTS)
1. 다운로드 : https://portal.influxdata.com/downloads
2. 서버에서 직접 다운로드
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.2.0_amd64.deb
sudo dpkg -i influxdb_1.2.0_amd64.deb
3. /etc/influxdb/influxdb.conf 파일 튜닝 필요 (모니터링 대상 메트릭 개수, 모니터링 간격 관련)
4. 시작 /etc/init.d/influxdb start (restart,stop 등)
5. iptables 사용중이라면 포트 등록
API -> iptables -A INPUT -m state –state NEW -m tcp -p TCP -s 10.20.x.x/32 –dport 8086 -j ACCEPT
DB 관리 web -> iptables -A INPUT -m state –state NEW -m tcp -p TCP -s 10.20.x.x/32 –dport 8083 -j ACCEPT
6. http://x.x.x.x:8083 접속 하면 influxdb 관리화면 (shell 에서도 가능 -> influx 실행 (mysql 과 비슷함))
7. DB 생성은 예를들어 telegraf agent 환경파일(telegraf.conf) 에서 output 을 influxdb 로하고 DB명을 지정해주면 자동으로 DB가 create 됨
lGrafana 구성 (Ubuntu 14.04.2 LTS)
1. 다운로드 : http://grafana.org/download/
2. 서버에서 직접 다운로드
wget https://grafanarel.s3.amazonaws.com/builds/grafana_4.1.2-1486989747_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.1.2-1486989747_amd64.deb
sudo /etc/init.d/grafana-server start (stop,restart)
3. 환경설정: /etc/grafana/grafana.ini (웹으로 접속할 port 명시)
4. 시작 /etc/init.d/influxdb start (restart,stop 등)
5. iptables 사용중이라면 포트 등록
웹 port -> iptables –A INPUT –m state –state NEW –m tcp –p TCP –s 10.20.x.x/32 –dport 8080 -j ACCEPT
6. http://x.x.x.x:8080 접속 하면 grafana 화면 (디폴트 접속 정보 admin / admin 접속후 필히 변경 요망)
7. 그래프 생성 포인트
datasource -> influxdb -> 사용할 DB 선택 -> graph 생성 및 커스터마이징
lTelegraf 구성 (윈도우 or 리눅스 agent 모두 가능)
1. 다운로드 : https://portal.influxdata.com/downloads
2. 서버에서 직접 다운로드
– 리눅스
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.2.1_amd64.deb
sudo dpkg -i telegraf_1.2.1_amd64.deb
– 윈도우
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.2.1_windows_amd64.zip
unzip telegraf-1.2.1_windows_amd64.zip
3. 환경설정: /etc/telegraf/telegraf.conf (리눅스)
c:\telegraf\telegraf.conf (윈도우)
4. 시작 /etc/init.d/telegraf start (restart,stop 등)
services.msc -> telegraf (윈도우)
5. telegraf.conf 에서 influxdb api 8086 포트를 호출해서 모니터링 data metric 전송
모니터링 대상 메트릭은(cpu,mysql,apache등등) telegraf.conf 에서 각 섹션별 모니터링 plugin에서 설정
Input, Output Plugin Sample 은 git 에서 검색하면 다양하게 나옴.
lKapacitor (알람 설정) influxdb 로 저장되는 data metric를 실시간(stream) 감시하여 조건에 부합되면 -> mail, slack, talk 알려줌
1. 다운로드 : https://portal.influxdata.com/downloads
2. 서버에서 직접 다운로드
wget https://dl.influxdata.com/kapacitor/releases/kapacitor_1.2.0_amd64.deb
sudo dpkg –I kapacitor_1.2.0_amd64.deb
3. 환경설정: /etc/kapacitor/kapacitor.conf
[[influxdb]] <- influxdb 연결 설정
[smtp] -> 서버에 SMTP설치(sendmail) 되야함 / 이벤트에 부합되면 smtp사용하여 메일발송
4. 시작 /etc/init.d/kapacitor start (restart,stop 등)
5. TICK 스크립트(다음장에 예제)를 작성 하여 -> 선언해주고 define -> 활성화 enable 해줘야함
예) 선언 : kapacitor define storage_cpu -type stream -dbrp public.default -tick storage_cpu.tick
활성화 : kapacitor enable storage_cpu
현재 등록된 알람 설정 확인 -> kapacitor list tasks
알람 해제 -> kapacitor disable storage_cpu
예: Hyper-V Guest CPU 사용량에 대한 tick script -> email, slack 통보
#kapacitor define host_guest_cpu -type stream -dbrp telegraf.default(DB명) -tick host_guest_cpu.tick(선언)
#kapacitor enable host_guest_cpu (활성화)
#kapacitor disable host_guest_cpu (비활성화)
#kapacitor enable host_guest_cpu (삭제)
#kapacitor enable host_guest_cpu (등록된 Rule 보기)
cat host_guest_cpu.tick
stream
|from()
.measurement(‘win_hyperv’)
.where(lambda: “objectname” == ‘Hyper-V Hypervisor Logical Processor’)
.groupBy(‘host’)
|window()
.period(1m)
.every(5m)
|alert()
.details(”’
<h1>{{ .ID }}</h1>
<b>Status : {{ .Level }}</b><br>
<b>Trigger : Guest CPU(%)</b><br>
<b>Host : {{ index .Tags “host” }}</b><br>
<b>Value : {{ index .Fields “% Guest Run Time” }}</b><br>
”’)
.message(‘{{ .Level}}: {{ .Name }}/{{ index .Tags “host” }} Guest CPU(%): {{ index .Fields “% Guest Run Time” }}’)
.crit(lambda: “% Guest Run Time” > 94)
.log(‘/data/alert_log/host_cpu_guest.log’)
.email()
.slack()
참고 사항
influxdb :
서버 리소스 사이징에 대해서는 가이드라인이 있음 (https://www.influxdata.com/)
저장되는 메트릭 수가 많을수록 HDD 성능이 좋아야함 (SSD 추천: 거의 실시간으로 disk I/O가 빈번하기때문)
그리고 retention 정책 , cache 관련 설정등을 사이즈에 맞게 잘 튜닝해야함
성능 문제 발생시 Sharding 이 되나 구조가 복잡해 지고 샤딩 이전에 Scale-up이 가능하다면 먼저 진행
하는것이 바람직하다고 생각됨
클러스터 구성 (HA)는 유료이나 오픈 소스로도 구성 가능 (구글링 요망)
Grafana :
현재 4.2.x 버전인데 업그레이드 잘됨 (패키지 받아서 그냥 설치하면됨 / 그리고 restart)
버전 UP시 grafana.org 에 blog 에 가면 어떤 부분이 개선되고 패치되었는지 자세하게 나옴
플러그인 설치는 grafana.net 가면 있음
Telegraf :
windows agent는 influxdb 버전과 호환되야함 (버전 맞춰 주는게 좋음 )
기억으로 최신 버전 사용시 influxdb로 insert 가 되지 않아 고생했던 기억이……….
Kapacitor :
Notification (alert) 담당 데몬이며, 들어오는 쿼리에 대해 감시설정을 stream방식이냐 batch 방식이냐 결정
tick 스크립트 수정시에는 수정후 무조건 다시 define 해줘야 수정된게 반영됨.