Zabbix로 MySQL 모니터링 100% 완성하기

“복잡한 Zabbix 운영을 더 효율적으로 만들고 싶다면,
블로그의 핵심 내용을 집대성한 『Zabbix 엔터프라이즈 최적화 핸드북(PDF)』을 확인해보세요.”

https://jikimy.gumroad.com/l/zabbix-master


관련 글 :

(베어메탈 / Kubernetes Pod 환경 완전 지원, Agent2 플러그인 기반)

Zabbix에서 MySQL 모니터링은 예전처럼 UserParameter 스크립트를 얹는 방식이 아니다.
Zabbix Agent2 + MySQL 플러그인만 있으면 관련 지표(InnoDB, Slow Query, Replication, Buffers)를 수집 가능하다.

하지만 문제는 실제 운영 환경이 두 가지로 나뉜다는 점이다.

  • ① MySQL이 베어메탈(물리/VM) 서버에서 구동
  • ② MySQL이 Kubernetes Pod에서 Service External IP로 노출되어 구동

두 환경은 네트워크 구조가 완전히 다르기 때문에, Agent2 설정 방식도 다르다.
이 글은 그 모든 차이를 Zabbix 7.4 기준으로 완전히 정리한 실무 가이드다.


1. 지원 버전

Zabbix

  • Zabbix Server/Proxy 7.4 이상
    : zabbix 홈페이지의 설명에 의하면 5.0 이상도 가능하다.

MySQL 엔진

  • MySQL 5.7 / 8.0 / 9.4
  • Percona 8.4
  • MariaDB 10.6 / 11.8

2. MySQL 모니터링 계정
생성 (공통)

환경과 관계없이 다음 권한만 준비하면 된다.

CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>';

GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW
ON *.* TO 'zbx_monitor'@'%';

MariaDB 10.5.9 이상은 추가 권한 필요:

GRANT SLAVE MONITOR ON *.* TO 'zbx_monitor'@'%';

3. Agent2 플러그인 설정 파일의 정확한 경로

Agent2 측에 MySQL 플러그인이 미리 설치·활성화되어 있어야 하며, 정상적으로 설치가
되었다면 아래와 같은 경로에 설치 된다.


4. 템플릿 매크로 방식 vs Agent2 세션 방식

두 방식 모두 동작하지만 성격이 다르다.

✔ 템플릿 매크로 방식

{$MYSQL.DSN}       = tcp://192.168.117.5:3306
{$MYSQL.USER}      = zbx_monitor
{$MYSQL.PASSWORD}  = <password>

장점: plugin 설정 파일 수정 필요 없이. UI 에서 한번에 설정 가능.
단점: Zabbix UI에서 비밀번호가 보임


✔ Agent2 세션 방식 (권고)

대상호스트에 zabbix agent2를 설치한 이후
/etc/zabbix/zabbix_agent2.d/plugins.d/mysql.conf
에서 아래와 같이 값을 변경한 후 zabbix agent2 재시작

[기본값]
Plugins.Mysql.Sessions.*.Uri= Plugins.Mysql.Sessions.*.User=
Plugins.Mysql.Sessions.*.Password=

[수정값]
Plugins.Mysql.Sessions.example_mysql.Uri=tcp://192.168.117.5:3306
Plugins.Mysql.Sessions.example_mysql.User=zbx_monitor
Plugins.Mysql.Sessions.example_mysql.Password=<password>

템플릿 매크로 적용 : zabbix web ui에서 대상 호스트 만든 후 템플릿 및 매크로 적용

{$MYSQL.DSN} = example_mysql

장점:

  • 패스워드가 Agent2 서버 내부에만 존재
  • 여러 인스턴스 관리 가능
  • 보안·확장성 최고
  • Zabbix 에서 추천하는 방식

    Tip. 플러그인 설정 방식 :

    ✔ (A 방식) Default 값만 사용하는 단일 MySQL 모니터링
    MySQL이 1개만 존재할 때 사용
    /etc/zabbix/zabbix_agent2.d/plugins.d/mysql.conf

    Plugins.Mysql.Default.Uri=tcp://192.168.117.5:3306 Plugins.Mysql.Default.User=zbx_monitor Plugins.Mysql.Default.Password=<password>

    zabbix web에서 템플릿 매크로는 비워두거나 그대로 둔다.

    이 방식의 장점
    설정 간단
    세션 이름 필요 없음
    단일 MySQL 환경에 최적

    ✔ (B 방식) Sessions 구조를 사용하는 멀티 인스턴스 모니터링
    여러 개의 MySQL 혹은 여러 DSN을 써야 한다면 Sessions 방식이 정답이다.
    (1개만 사용시에도 사용해도 상관 없다)

    /etc/zabbix/zabbix_agent2.d/plugins.d/mysql.conf

    Plugins.Mysql.Sessions.example_mysql.Uri=tcp://192.168.117.5:3306 Plugins.Mysql.Sessions.example_mysql.User=zbx_monitor Plugins.Mysql.Sessions.example_mysql.Password=<password>

5. Kubernetes Pod MySQL 모니터링 구성

Agent2는 Host에서 실행되고
MySQL은 Pod 안에서 실행되는 환경에서의 구성 :

Pod의 ClusterIP는 외부에서 접근 불가이므로 반드시 Service(NodePort or LoadBalancer) 를 통해 접근해야 한다.

가장 실무적인 방법은:

LoadBalancer External IP 기반 모니터링

● K8S 구조

Agent2 (Host) → Service External IP → MySQL Pod

● External IP 예

192.168.117.90:3306

● mysql.conf

Plugins.Mysql.Sessions.K8s.Uri=tcp://192.168.117.90:3306
Plugins.Mysql.Sessions.K8s.User=zbx_monitor
Plugins.Mysql.Sessions.K8s.Password=<password>

zabbix web ui 템플릿 매크로:

{$MYSQL.DSN} = K8s

6.지표 : 주요 수집 아이템

  • InnoDB 버퍼/엔진 통계
  • Thread/Connection
  • Slow Query
  • Temp Table 생성 비율
  • Buffer Pool Hit Ratio
  • 쿼리 처리량

7. 트러블슈팅 체크리스트

1) 베어메탈 (Bare Metal) 환경

  • MySQL 설정 (my.cnf) 확인: bind-address127.0.0.1로 설정되어 있으면 외부 접속 불가 (0.0.0.0으로 변경 필요)
  • Unix Socket 권한: Zabbix Agent 실행 계정(zabbix)이 /var/run/mysqld/mysqld.sock 파일에 대한 읽기/쓰기 권한이 있는지 확인
  • 방화벽 (Firewall): OS 방화벽(firewalld, ufw) 또는 클라우드 보안 그룹(Security Group)에서 3306 포트가 차단되었는지 확인
  • SELinux 차단: (중요) SELinux가 Enforcing 모드일 경우, Zabbix Agent가 소켓이나 포트에 접근하는 것을 막을 수 있음 -> SELinux 비활성화 권고

2) 쿠버네티스 (Kubernetes) 환경

Kube-proxy 모드: 드물게 IPVS 모드 사용 시 세션 타임아웃으로 인한 간헐적 연결 끊김 발생 여부 확인

NetworkPolicy 차단: 네임스페이스에 적용된 NetworkPolicy가 External IP(Zabbix)로부터 들어오는 Ingress 트래픽을 허용하는지 확인

Service External IP 변경: LoadBalancer를 재생성하거나 노드 재시작 시 External IP가 변경되었는데, Zabbix 호스트 설정은 기존 IP 인지 변경 적용된 IP인지 확인

Pod 준비 상태 (Readiness Probe): MySQL Pod가 Running 상태여도 Readiness Probe 실패 시 Service의 Endpoints 목록에서 제외되어 접속이 차단됨


8. 결론

Zabbix 7.4 환경에서 MySQL 모니터링은 다음 한 문장으로 요약할 수 있다.

Agent2가 MySQL과 연결할 수 있는 DSN만 정확히 지정하면, 나머지는 모두 자동으로 해결된다.

  • 플러그인 경로는 /etc/zabbix/zabbix_agent2.d/plugins.d/
  • UserParameter는 6.0 이후 필요 없음
  • K8S Pod → External IP · NodePort TCP
  • 세션 방식이 가장 안정적·보안적·확장성 좋음
  • 템플릿은 “MySQL by Zabbix agent 2” 하나면 충분

운영 환경이 베어메탈이든 Pod든 중요하지 않다.
DSN 구성만 정확하다면, Zabbix는 환경에 구애받지 않는 강력한 MySQL 모니터링
플랫폼이 된다

🛠 마지막 수정일: 2025.12.09

ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. 본문 및 이미지를 무단 복제·배포할 수 없습니다. 공유 시 반드시 원문 링크를 명시해 주세요.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.

💡 도움이 필요하신가요?
Zabbix, Kubernetes, 그리고 다양한 오픈소스 인프라 환경에 대한 구축, 운영, 최적화, 장애 분석, 광고 및 협업 제안이 필요하다면 언제든 편하게 연락 주세요.

📧 Contact: jikimy75@gmail.com
💼 Service: 구축 대행 | 성능 튜닝 | 장애 분석 컨설팅

📖 E-BooK [PDF] 전자책 (Gumroad): Zabbix 엔터프라이즈 최적화 핸드북
블로그에서 다룬 Zabbix 관련 글들을 기반으로 실무 중심의 지침서로 재구성했습니다. 운영 환경에서 바로 적용할 수 있는 최적화·트러블슈팅 노하우까지 모두 포함되어 있습니다.


💡 Need Professional Support?
If you need deployment, optimization, or troubleshooting support for Zabbix, Kubernetes, or any other open-source infrastructure in your production environment, or if you are interested in sponsorships, ads, or technical collaboration, feel free to contact me anytime.

📧 Email: jikimy75@gmail.com
💼 Services: Deployment Support | Performance Tuning | Incident Analysis Consulting

📖 PDF eBook (Gumroad): Zabbix Enterprise Optimization Handbook
A single, production-ready PDF that compiles my in-depth Zabbix and Kubernetes monitoring guides.