카테고리 Archives: Dokcer

Docker를 이용한 Zabbix 7.2 설치 및 구성

2025-02-17_135350

서버 감시를 위한 오픈소스 툴인 Zabbix 7.2 을 Docker 를 이용해  구성 한다.

공식 메뉴얼 : https://www.zabbix.com/documentation/current/en/manual/installation/containers

 

메뉴얼이 영어긴 하지만 설명이 잘 되어 있는 편이다.

Docker 가 설치된 서버를 준비 하고 메뉴얼을 따라 진행 하되, 몇가지 주의 할 점이 있어서 작업 메뉴얼을 작성 한다.

 


1. zabbix 서버 구축

먼저 도커에 zabbix-net 이라는 네트워크를 생성 한다.

 

mysql 컨테이너를 실행한다.

추가된 옵션:
-v /docker/mysql/conf:/etc/mysql/conf.d : mysql 설정을 변경해야 하는 경우를 위해서 호스트와 연결한다.
-v /docker/mysql/mysql_data:/var/lib/mysql : mysql 버전 업그레이드를 위해 데이터 폴더를 호스트와 연결한다.

 

zabbix 게이트웨이 컨테이너를 실행한다.

JMX 를 이용한 java 프로세스 감시용도로 쓴다.

 

zabbix 서버 컨테이너를 실행 한다.

추가된 옵션:
-e ZBX_CACHESIZE=256M,-e ZBX_VALUECACHESIZE=256M : 감시할 대상이 많아서 증설하였다.

 

zabbix 웹 UI 컨테이너를 실행한다. (nginx, php)

PHP_FPM_PM_MAX_REQUESTS 을 사용해 php-fpm 프로세스가 종료 될 수 있도록 하였다.

 

zabbix-agent2 는 docker 방식도 존재 하지만  호스트OS에 직접 설치해 Docker 를 실행하는 호스트 역시 감시 대상에 넣도록 한다. (호스트OS: CentOS 7)

 


 

2. 기본 설정

설치된 서버의 IP로 접속을 해서 로그인 한다.

URL: (예제) http://192.168.0.240/
ID: admin
PW: zabbix

 

언어 설정은 관리 메뉴에서 변경할 수 있다. (각 유져별로 프로파일에서 설정 할 수도 있다.)
2025-02-17_130816

 

기본적으로 zabbix server 설정이 한개가 되어 있다.
템플릿에 Linux by Zabbix agent, Docker by Zabbix agent 2 를 추가 하고 호스트 OS의 hostnameIP 를 각 칸에 맞게 입력 한다.

2025-02-18_161129

 


 

연결할 서버들은 zabbix-agent2 또는 zabbix-agent 를 설치해서 연결 하거나 SNMP(네트워크 스위치, UPS, NAS) 으로 연결 한다.

zabbix 7.2 의 경우 연결해보니 CentOS 7(agent2) 이상 Ubuntu 16.04 부터 연결이 가능했다. (16.04 의 경우 agent2 가 아닌 agent 로 설치해야 한다.)

CentOS6 또는 Ubuntu 14.04 이하 버전의 경우 낮은 버전의 agent 를 설치해 연결해도 동작은 한다.

다만 몇가지 트리거가 동작하지 않았다. (크리티컬 하지 않다.)

 


 

3. 감시 대상 추가

zabbix-agent2 또는 zabbix-agent 를 이용한 연결 (Linux or Windows)

https://www.zabbix.com/download_agents

2025-02-17_111744
위와 같이 버전 > OS > OS Version > 패키지를 선택하고 화면 아래로 스크롤해보면 설치 메뉴얼을 제공한다.
윈도우는 원형으로 표시된 부분을 눌러 다운받아(.msi) 설치 한다

리눅스는 설치 후 설정 파일/etc/zabbix/zabbix_agent2.conf을 자신에게 맞게 수정해야 한다.

설정 후에는 agent 를 재시작 한다.
주의할점으로 conf에 선언된 “Hostname” 과 zabbix 관리자 내에 설정된 각 “호스트명” 은 꼭 일치해야 하며 유일한(uniq) 값을 사용해야 한다.

윈도우는 아래와 같이 설치 화면에서 zabbix server 의 아이피를 입력 한다.
2025-02-17_112350
윈도우역시 여기서 입력되는 “host name” 과 관리자내의 “호스트명”이 일치해야 한다.
실제 부여된 컴퓨터이름과 관계 없이 바꾸어서 일치시켜 사용할 수도 있다.

2025-02-18_135126
감시 대상 추가의 연결 개념은 위 그림과 같다.

host-setting: 감시할 대상의 IP 또는 호스트명으로 연결 시도
agent.conf: 선언된 IP에서의 접근을 허용 & 템플릿 정보 획득 -> 데이터 생성
zabbix-server: 감시대상의 정보 수집

 

snmp를 이용한 연결

일반적으로 네트워크 스위치와 같은 경우 별도의 Agent 설치가 지원 될리가 없다. 그래서 SNMP(Simple Network Management Protocol) 을 이용해서 감시 한다.
2025-02-17_104837
SNMP 일반적으로 161포트를 이용해서 polling / trpping 방식으로 작동 한다.

SNMP 연결을 위한 커뮤니티는 관리 > 매크로 에서 지정 한다.
값 오른쪽 [T] 버튼을 눌러서 암호 형식으로 저장 하면 가려지기도 한다.2025-02-14_154638
보안이름, 인증패스, 프라이버시 패스는 감시 대상 장치에 동일하게 설정이 되어야 하겠다.

아래는 SNMP v3를 이용한 Synology 연결시 사용하는 방법 이다.
synology > 제어판 > 터미널 및 SNMP 설정

2025-02-17_110200

Zabbix Server > 데이터 수집 > 호스트 > synology-NAS > 인터페이스
2025-02-17_095818

각 UTM 또는 네트워크 스위치 등은 제공 되는 메뉴얼을 참조해서 snmp를 활성화 해서 연결 할 수 있다.

아래는 추가적인 예제로.. UPS(Uninterruptible Power Supply system) 장치의 SNMP 설정 화면 이다.
2025-02-17_113330
EATON 이란 브랜드 이고 zabbix 서버에 템플릿이 없어서 별도로 템플릿(yaml) 파일을 임포트 하였다.
https://github.com/zabbix/community-templates/tree/main/Power_(UPS)

 


 

4. 알림 설정

왼만한 장애요소는 이미 트리거로 등록 되어 있다.  (cpu/mem/disk 사용량 초과, 네트워크 이상 등등)
smartmontools 버전이 7.1 이상일때 디스크 배터 섹터 등의 감시도 된다.
때문에 알림 설정을 해서 서버관리자가 알수 있도록만 하면 된다.

알림 설정은 미디어 타입 활성화(연락 수단), 관리자 계정의 연락처 갱신, 트리거 액션 활성화 를 해서 받아볼 수 있다.
2025-02-17_133633 2025-02-17_133103
텔레그램 수신처는 botfather 를 이용해 봇용 채팅방을 생성하고 [chatid] 를 확인해서 넣어주면 된다.
2025-02-17_133339

 

역인글:

zabbix-agent2 추가 템플릿 적용
Zabbix 서버의 데이터베이스 테이블 파티셔닝
zabbix 서비스 발견 (GoogleUpdater) 제외
powershell 을 이용한 프로그램 삭제

docker 를 이용한 브라우저(firefox) 실행

서버에서 가끔 브라우저를(GUI) 실행하고 싶을때가 있다.

보통은 실험 적인 환경이나  proxy가 필요한 경우에 사용할 수 있겠다.

mobaxterm 을 이용한 방법은 너무 느리기 때문에 찾다보니 docker를 이용한 방법으로 하면 굉장히 빠른 속도로 사용이 가능 했다.

아래는 docker를 이용해서 서버에서 브라우져를 실행하는 방법이다. (Synology 나스에서도 경로만 맞추면/volume1/docker/xxxxx 잘 된다.)

 

출처: https://github.com/jlesage/docker-firefox

 

명령어 실행 후 호스트서버에 /docker/appdata/firefox 가 자동생성 되고 설정 등이 저장 된다.

 

클라이언트PC 브라우저에서 http://서버IP:5800 으로 접속을 하면 아래와 같이 브라우저 안에 브라우저가 나온다.

2025-01-02_160620

웹접속을 통한 브라우저이다 보니 몇가지 제한 사항이 있다.

  1. 한글 입력이 되지 않는다.
  2. 붙여넣기(ctrl+v)가 자유롭지 않다.
  3. 사운드 출력을 위한 옵션은 있지만 서버에서 출력이 된다. (즉 자신의 브라우져로 소리는 들을 수 없다.)
    WEB_AUDIO=1 옵션이 있지만 잘 작동하지 않았다.
  4. 여러 클라이언트 접속시 하나의 세션이 열린다.(다른 클라이언트의 입력 또는 마우스 움직임 등도 보인다.)

 


 

한글 입력 및 붙여넣기 부분은 다음과 같이 진행 한다.

  1. 화면 왼쪽의 … 을 눌러서 레이어 팝업의 Clipboard 의 텍스트 입력창에 텍스트 입력을 한다.(여기서는 한글 입력이 잘된다.)
  2. 이후 입력창에 붙여넣기(CTRL + V) 를 한다.

2025-01-03_091700

계정 동기화 혹은 사이트 로그인 등을 할 경우 실행중인 Container 를 종료 하거나 로그 아웃이 필수다.
그냥 브라우저가 열려 있는 판정이기 때문에 다른 사람이 들어올 경우 로그인한 사이트의 로그인 탈취를 당할 수 있다.

Docker 로그 설정

WEB 및 WAS 를 docker 를 이용해서 구현을 하다 보니 디스크 사용량이 점점 많이 증가 하게 된다.

컨테이너를 지우고 새로 띄우면 로그는 날라 가지만 주기적으로 해야 하는 불편함…..

 

그래서 docker 에서 /etc/docker/daemon.json 에 로그 관련 설정을 추가 한다. (50MB, 10개)

 

그리고 Docker 를 재시작 한다.

 

이미 실행된 Container 에는 적용 되지 않는다. 즉 새롭게 생성한 Container만 적용이 된다.

docker container update 로도 변경 되지 않는 항목이기 때문에 컨테이너를 삭제하고 run을 새로 해야 한다.

Docker 와 firewall-cmd 사용법

Rockylinux(OracleLinux) 8.x 에서 Docker 는 run/start/stop 을 할때
Docker-proxy 가 iptables 를 이용해서 DOCKER, DOCKER-USER, DOCKER-ISOLATION-STAGE-1, DOCKER-ISOLATION-STAGE-2 등의 Chain을
만들어 관리 하기 때문에 기존에 설정된 firewall 설정을 무시하고 호출이 가능한 상태가 된다.

OCI 에서는 인스턴스에 시큐리티 리스트에서 아이피/포트를 관리할 수 있으나
스위치의 access_list 처럼 같은 서브넷에 속한 모든 서버가 영향을 받기 때문에 firewall 에서
설정한 포트만 오픈을 하고자 할때 사용할 수 있는 방법이다.(OCI 안에서 여러 인스턴스를 운영하거나 로컬에서 Docker 서버를 운영할때..)

AWS 의 보안 그룹은 각 인스턴스 별로 작동하기 때문에 불필요 하다.


  1. 먼저 도커의 iptables 사용 옵션을 끄고 docker 를 재시작 한다.
  2. firewalld 에서 설정된 값을 모두 초기화 한다.
  3. Docker 의 네트워크 정보를 확인 한다.
  4. Container 에서 호스트롤 통해 outbound 를 위한 설정을 추가 한다. (첫번째줄에 Docker의 네트워크 정보를 입력해서 실행 해야 한다.)
  5. inbound 를 위한 설정을 추가 한다.
  6. 필요에 따라 아래와 같이 inbound 설정을 추가 한다. (nginx-docker 를 위한 80(tcp), 443(tcp/udp) 을 연다.)

 

마지막에 여는 명령어를 보면 알겠지만 열려고 하는 컨테이너의 IP를 알아야 한다.

때문에 Container 으로 진입해서 ifconfig 를 보면 알 수 있겠지만 매우 귀찬은 관계로 스크립트를 작성 하였다.

실행하면 아래와 같이 나오는데 필요한 Container 부분만 실행을 해서 사용하면 된다.

20240620_131234


출처: https://firewalld.org/2024/04/strictly-filtering-docker-containers

Docker 를 이용한 데이터베이스(mariadb) 사용법

Web / Was 만 도커를 이용해 배포하는 이유는 Mysql, MariaDB 등의 공식 도커가 너무 잘되어 있어서 이다.

그래서 이용하는 법만 알면 되는데.  ‘ㅅ’a

공식 소개 페이지에 잘 나와 있긴 하지만 docker 사전 지식 없이 사용을 하기엔 설명을 건너 뛴 부분이 많다.

 

여기서는 MariaDB 공식 도커이미지를 가지고 간단히 DB를 띄우는 방법에 대한 부분만 설명 한다.

사용할 버전은 10.11 버전이다. 10.11을 사용하는 이유는 LTS 이기 때문에 지금 당장은 가장 오랜 업데이트가 지원될 예정이기 때문이다. (https://endoflife.date/mariadb)

– 2024-09-19 추가 : 현재 11.4 가 마지막 Long Term Support 버전이다. ‘ㅅ’a –

 

사용할 도커 이미지: mariadb – Official Image | Docker Hub

 

1. 이미지 pull 및 run을 한다.

 

2. mysql을 이용 한다. = _ =..

 

3. 그냥 글을 마무리 하기 심심하니.. 데이터베이스 생성, 유져 생성 쿼리…

 


 

PS. docker run 에 대한 옵션에 대한 설명.

--restart unless-stopped : stop 명령을 내린게 아니라면 (재 부팅 또는 도커 데몬을 스탑 한경우..) 자동으로 시작 하는 옵션.

-v /etc/mysql/mariadb.conf.d/:/etc/mysql/mariadb.conf.d/ : my.cnf 수정이 필요한 DB 튜닝의 경우 /etc/mysql/mariadb.conf.d/custom.cnf 파일을 만들고 내용을 넣고 컨테이너를 재시작 하면 적용 된다.

-v /var/lib/mysql:/var/lib/mysql : mysql 의 데이터 폴더를 마운트 한다.

docker를 이용한 데이터베이스 사용은 업데이트를 편하게 하기 위함이기 때문에 container 를 다시 run 하면 안의 내용을 모두 유실 하게 된다. 때문에 이와 같이 주요 폴더는 호스트OS 와 연결 하여 사용 하면 된다.

-e TZ=Asia/Seoul 만들려는 인스턴스의 timezone을 Seoul(+9) 으로 설정 한다.

-e MARIADB_ROOT_PASSWORD=루트패스워드 run 할때 루트패스워드를 지정해서 생성 한다.(미지정시 랜덤 생성)

 


 

연결할 WEB / WAS 구현은 아래 글을 확인합니다 ‘ㅅ’a

OCI arm 인스턴스에서 docker로 web, was 사용