zabbix windows cannot obtain performance information from collector 에러 해결 방법 (check_counter_path(): cannot make counterpath for "\\":)
자빅스 서버가 어느 순간부터 윈도우 호스트의 일부 리소스 등을 가져오지 못했습니다. 자빅스 대시보드에서 확인할 때 "zabbix windows cannot obtain performance information from collector" 라는 메시지와 윈도우 호스트에서의 zabbix_agentd.log를 확인했을 때 check_counter_path(): cannot make counterpath for "\\": 라는 에러 메시지가 발생하고 있었습니다.
자빅스 "Zabbix value cache working in low memory mode" 해결 방법
자빅스에서 "Zabbix value cache working in low memory mode" 알람이 발생 한다면 Cache 값을 증설할 필요성이 있습니다. 일반적으로 /etc/zabbix/zabbix_server.conf 에서 ValueCacheSize, CacheSize 두 값을 변경 후 zabbix-server를 재실행 해주어 적용시킨 후 해결할 수 있었습니다.
저의 경우 약 5천여개의 아이템과 3500여개의 트리거가 있는 상황에서 ValueCacheSize, CacheSize 두 값을 512M으로 변경해주었고 매우 넉넉하게 사용중인 내용을 확인할 수 있었습니다. (저같은 경우 규모가 큰 환경이 아니고 리소스도 여유가 많기 때문에 넉넉히 주었습니다.)
zabbix forum 어떤 유저의 케이스를 보면 26만여개의 아이템, 20만여개의 트리거가 실행중인 상황에서 100MB로 변경하여 해결했다는 케이스도 있으니, ValueCacheSize와 CacheSize를 서서히 증가 시키며 최적값을 확인하는 방법으로 진행 하시는게 좋을 것 같습니다.
윈도우 방화벽을 사용중일 경우 Ctrl+R → control firewall.cpl → 고급 설정 → 인바운드 규칙 → 새 규칙 → 포트 체크 → 특정 로컬 포트에 10050 입력 후 쭉 다음을 클릭해 10050 포트를 오픈 해주세요.
3. 스케줄러 설정 (Agent Server)
매 분마다 temperature.pyw 파일을 실행시켜 CPU/GPU 온도를 파일로 떨궈주어야 합니다. (파이썬을 사용하실줄 알 경우 따로 코드 작성하여 진행 하셔도 무방 합니다.)
Ctrl+R → taskchd.msc → 좌측 작업 스케줄러 라이브러리 → 좌측 폴더 Microsoft → 좌측 폴더 Windows → 우측 메뉴의 새 폴더 (폴더명 Zabbix로 생성) → 좌측 Zabbix
※ 작업 스케줄러 경로는 다르게 하셔도 무방 합니다.
이제 zabbix 폴더를 클릭하고 우측의 작업 만들기를 눌러 주세요.
사용자를 system으로 입력 후 이름 확인을 눌러 한번 체크 해주시고 확인을 눌러 저장 합니다.
트리거를 생성 합니다. 매 1분마다 실행시키기 위해 아래와 같이 설정을 진행 해주세요.
이제 tempertature.pyw 파일을 실행시키기 위한 동작을 설정 합니다. 아래와 같이 작성하되 [YOUR USER NAME] 부분은 사용중인 윈도우 사용자 계정에 맞게 수정 해주어야 합니다.
# 프로그램/스크립트
C:\Users\[YOUR USER NAME]\AppData\Local\Programs\Python\Python39\pythonw.exe
# 인수 추가(옵션)
C:\Zabbix\script\temperature.pyw
이제 스케줄러가 동작하기 시작하면 매 1분마다 C:\zabbix 경로에 아래와 같이 CPU/GPU 온도가 들어가 있는 파일을 떨궈줍니다.
4. 자빅스 아이템 및 트리거 설정
템플릿은 Configuration → Templates → Create template 에서 임의의 이름으로 생성 해주신 후(저의 경우 temperature) 템플릿을 보면 Items가 있는데 이것을 클릭하여 눌러 이동하시고 우측 상단의 Create item 클릭하신 후 아래와 같이 값을 채워 넣어 주세요.
마찬가지로 Triggers로 이동 후 Create trigger를 클릭한 후 아래와 같이 채워 줍니다. 아래 트리거 설정은 최근 5개의 값중 90이 넘어가는 값(온도)이 2개를 초과하여 발생할 경우 Disater 등급의 트리거를 발생 시킵니다.
※ /temperature/ 부분은 임의로 생성한 템플릿명에 맞춰 수정 해주세요.
## 최근 5분간 온도가 90~99도를 2번 초과하여 발생할 경우
count(/temperature/log[C:\zabbix\temperature_CPU0.txt,,,,skip],#5,"regexp","9[0-9]")>2
## 최근 3분간 온도가 90~99도를 1번 초과하여 발생할 경우
count(/temperature/log[C:\zabbix\temperature_CPU0.txt,,,,skip],#3,"regexp","9[0-9]")>1
## 최근 3분간 온도가 80~89도를 1번 초과하여 발생할 경우
count(/temperature/log[C:\zabbix\temperature_CPU0.txt,,,,skip],#3,"regexp","8[0-9]")>1
5. 기타
이후 테스트는 temperature 파일의 내용을 90도 등으로 변경하여 테스트하고 트리거가 발생 하는지 확인 해보시면 됩니다.
또한 하나의 파일에 텍스트가 너무 많이 쌓이는것을 방지하기 위해 logs 폴더를 만든 후 아래 내용을 윈도우 배치 파일로 만들고 스케줄러에 등록하여 특정 기간마다 비우도록 할 수 있습니다. 또는 파이썬 등 다른 방법을 통해 진행할 수 있으니, 편하신것을 선택하여 활용하면 될 것 같습니다.