태그 Archives: Docker

zabbix-agent2 추가 템플릿 적용

감시대상에 zabbix-agent2 를 설치 했다면 아래와 같이 추가 플러그인을 통해서 좀더 상세한 감사를 할 수 있다.
Centos는 6 이상 부터 zabbix-agent2 를 사용할 수 있고, Ubuntu는 18.04 이상 부터 zabbix-agent2 를 사용할 수 있다.

 


 

1. docker

docker.sock 파일 권한을 주어야(usermod) 하기 때문에 zabbix 계정의 서브 그룹으로 docker 를 추가 해야 작동 한다.

2025-02-17_161342

 


 

2. smartctl 을 이용한 디스크 장애 사전 탐지

  • 리눅스

물리적인 HDD 가연결된 서버의 경우 smartctl 을 설치 해서 디스크의 장애를 사전에 탐지할 수 있다.(가상 서버는 불필요 하겠지 ‘ㅅ’a)
smartctl v7.1 이상을 요구 하기 때문에 Ubuntu 18.04 이상 // Rockylinux/Almalinux 8 이상에서 사용이 가능 하며 아래의 명령어로 설치 할 수 있다.

zabbix 계정에 smartctl 명령어 위치를 확인하고 password 없이 smartctl 사용 권한을 부여 한다.

smartctl 명령어 및 zabbix_agent2 명령어를 실행해서 테스트를 하고 정상적 이라면 zabbix-agent2 서비스를 재시작 한다.

 

  • 윈도우

https://sourceforge.net/projects/smartmontools/files/ 에서 smartmontools-7.4-1.win32-setup.exe 설치 파일을 받아 설치 한다.

워드패드를 관리자 권한으로 실행 한뒤에 C:\Program Files\Zabbix Agent 2\zabbix_agent2.d\plugins.d\smart.conf 파일을 불러와서 Plugins.Smart.Path을 다음과 같이 수정 한다.

설치 파일(exe)을 설치 할때 %PATH%를 유져로 잡아주기 때문에 그냥 cmd 나 smartctl 에서의 명령어 사용은 문제가 없지만 zabbix agent 2 서비스에서 호출을 해야 하기 때문에 다음 그림과 같이 시스템 변수로 %PATH% 를 잡아준다.

2025-02-27_173546   2025-02-27_1736062025-02-27_1736492025-02-27_173755

powershell 을 관리자 모드로 실행 해서 테스트를 하고 정상적 이라면 zabbix-agent2 서비스를 재시작 한다.

 

  • zabbix-server 콘테이너 안에서 zabbix_get 으로 클라이언트에 호출을 할 수 있다. (포트 10051)

호출을 했을때 마지막에
exit status 2 는 zabbix-agent2 가 smartctl 을 실행 할 수 없는 경우이다. 리눅스의 경우 sudo 권한 윈도우의 경우 path 가 문제일 가능성이 높다.
exit status 4 코드가 발생할 경우 디스크의 S.M.A.R.T 가 꺼져 있어서 확인할 수 없는 경우 이다. (레이드카드<->smartctl  호환성 문제)

 

  • 웹 UI 에서 세팅

zabbix 관리자 화면에서 생성된 호스트 템플릿에 SMART by zabbix agent 2를 추가 한다.

2025-02-18_132009

 

2025-02-28_091214

위 표를 보면 알겠지만 Linux에서는 대부분 지원 하지만 Windows 일 경우 지원하는 하드웨어가 좀 한정적이다.

 

  • 문제점1

smartmontools 버전이 7.0 이하 일때는….

지원되지 않는 OS 일경우 smartctl 명령어를 최신버전을 컴파일 해서 설치 한다. (gcc-c++, make 가 설치되어 있어야 한다.)
(Rockylinux 8.5 에서는 smartctl 버전이 7.1 이지만 정상 동작 하지 않았고 7.4를 깔면 동작이 가능했다.)

메뉴얼: https://www.smartmontools.org/wiki/Download#Installfromthesourcetarball
다운로드: https://sourceforge.net/projects/smartmontools/files/

make install 을 하면 centos 7 기준 으로 /usr/local/sbin/smartctl 위치에 설치 된다.

sudo 권한 부여 및 /etc/zabbix/zabbix_agent2.d/plugins.d/smart.conf 파일을 수정한다.

 

  • 문제점2

레이드 카드가 달린 HP 서버 linux 에서는 cciss 으로 명령어를 수집을 하긴 하는데 문제가 발생 하였다.
명령어 호출을 어찌하는지 아래 명령어로 확인 하는데만 26초가 소요가 되었다.

서버에 존재하지도 않는 3ware, areca 등을 호출하면서 에러메세지 리턴을 json 으로 파싱하면서 많은 시간을 쓴다는걸 확인 하였고 다음과 같이 해결 하였다.
먼저 위 명령어를 참조 해서 정상적인 동작을 하는 명령어를 찾는다. (SMART 가 Enabled 으로 나오는 명령어를 찾는다)

zabbix agent 가 실행하는 명령어를 보면 nvme0, nvme1 호출은 정상적이다.
하지만 sdb 는 cciss,1 이 아닌 cciss,0 으로만 호출했기 때문에 정상 호출이 안되어서 인식하지 못한다.
그래서 그에 대응할 수 있도록 sd[x] -d scsi에 반응 하도록 하고 스 이외 명령어 실행은 빠르게 종료 되도록 exit 2로 반환 하도록 스크립트를 만들어 적용 한다.

sudo 권한에 생성한 스크립트의 실행 권한을 추가 한다.

/etc/zabbix/zabbix_agent2.d/plugins.d/smart.conf 에서 만든 스크립트을 실행하도록 한다.

zabbix agent 2 를 재시작 한다.

 

  • 문제점3

Dell 서버에서는 또 다른 문제가 확인이 되었다.
디스크가 12개 정도 주렁주렁 달린 서버의 경우 위와 같은 방법으로 스크립트만 별도 작성해서 적용 하였을때에도 반환 속도가 4 ~ 7초 정도로 확인이 되었다.

smartctl 호출했을때 시간이 3초를 넘어가는 경우 Timeout occurred while gathering data 라는 메세지를 log 에서 확인이 가능하다.
/etc/zabbix/zabbix_agent2.conf/etc/zabbix/zabbix_agent2.d/plugins.d/smart.confTimeout=, PluginTimeout=, Plugins.Smart.Timeout= 옵션이 있으나
설정해도 3초가 넘어가면 시간 초과로 데이터 수집이 되지 않는다. (유명무실한 옵션….)

 


 

3. mysql

감시 대상 DB에 zbx_monitor 용 어카운트를 생성해야 한다.

이후 웹 UI – 호스트 설정 에서 다음과 같이 템플릿 Mysql by Zabbix agent 2을 추가 한다.

2025-02-17_173105

메크로 메뉴로 이동해서 다음과 같이 {$MYSQL.DSN}, {$MYSQL.USER}, {$MYSQL.PASSWORD}을  입력 한다. (관리 > 매크로 로는 설정이 되지 않는 부분이다.)
DSN 에는 tcp://localhost:3306을 입력하고, 패스워드는 텍스트 => 비밀 문자 형식으로 하여 보이지 않도록 한다.

2025-03-07_113701

Docker 으로 생성된 DB 일경우 아래와 같이 {$MYSQL.DSN} 부분을 tcp://[ContainerIP]:3306으로 지정 해야 한다.

2025-03-07_113758

 


 

4. postgres

마찬가지로 감시 대상 DB에 zbx_monitor 용 어카운트를 생성해야 한다.

pg_hba.conf 파일에 하단에 아래 내용을 추가 한다. (경로: /etc/postgresql/[버전]/main/pg_hba.conf)

설정한 이후 postgra 서비스를 재시작 해야 한다.

 

이후 웹UI 에서의 설정은 다음과 같이 PostgreSQL by Zabbix agent 2를 템플릿에 선언하고 매크로에 {$PG.PASSWORD}를 설정하면 된다.
2025-03-07_165623
2025-03-07_165752

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 를 종료 하거나 로그 아웃이 필수다.
그냥 브라우저가 열려 있는 판정이기 때문에 다른 사람이 들어올 경우 로그인한 사이트의 로그인 탈취를 당할 수 있다.

synology 에 docker 를 이용한 gitea 레포지토리 운영

gitea

git 은 기본적으로 Synology 에서 Git Server 를 제공 한다.
다만 GUI를 이용한 환경만 제공 하지 않기 때문에 어렵고 불편 하다.

그래서 Synology 서버에 docker 를 설치 하고 gitea 도커이미지를 이용해서 Container 를 띄움으로서 내부용 레포지토리를 운영 한다.
gitea go언어로 만들어져 가볍고 ssh 키 등록 및 http 연결을 잘 지원 하고 일반 사용법도 github와 비슷 하다.
ARM64 환경에서도 잘 되기 때문에 신규 사용자의 Amazon CodeCommit 이 중지된 지금 시점에서 클라우드내에 IaaS 으로 구축해 사용하기도 좋다.

 


 

  • Synology NAS 에서 docker 또는 Container Manager 를 설치 한다.(DSM 버전에 따라 패키지 명이 다를 수 있다.)

2024-12-18_165142

 

  • gitea/gitea 이미지를 다운로드 받는다.

2024-12-18_165554

 

  • 다운로드가 완료 되면 이미지를 실행해 시킨다.

2024-12-18_170015

내 경우엔 리소스를 제한하고 자동 재시작 옵션을 활성화 했다.
(gitea 는 golang 으로 만들어져 가볍지만(초기 메모리 사용량 100MB)  레포가 늘어 나면 메모리 사용량이 꾸준히 증가할 수 있다.

 

  • 다음 화면에서 연결될 포트를 선언 한다.

2024-12-18_170147

gitea 은 기본적으로 ssh, http 프로토콜을 사용한다.
DSM의 ssh 데몬과 충돌 하지 않도록 포트는 2222 으로 지정 하고 웹 포트는 3000을 사용 하도록 했다.

 

  • 파일 스테이션에서 연결할 폴더를 생성 한다.

2024-12-18_170330

Synology 에서 Container에 볼륨으로 연결될 드라이브는 docker 를 설치시 생성 되는 /docker 공유 폴더 아래에 있어야 권한 문제가 발생하지 않는다.

 

  • 스크롤을 내려서 연결할 볼륨 및 환경을 추가 한다.

2024-12-18_170421

참고로 내 Synology 의 관리자 아이디는 nas-admin 이 아니다. (쓸모 없는 =_= 공격금지)

 

  • 설정값 최종 점검 후 완료 버튼을 눌러 실행 한다.

2024-12-18_170444

 


 

  • gitea 으로 접속해 설치를 진행 한다. ( http://[Synology-Nas-IP]:3000 )

2024-12-18_173317

관리자 계정 설정의 ▶ 를 눌러서 관리자 정보를 입력 하는것을 잊지 말자.
중간에 빨간색, 파란색 칸은 Container 를 실행 할때 ssh, http 포트를 입력해야 하는 부분으로 맞추어 주어야 한다.

 

  • 테스트로 github 에 있는 레포지토리를 mirror 으로 생성 해본다.

2024-12-18_174235

2024-12-18_174248

2024-12-18_174347

미러로 생성 하는 경우 원본 에서 8시간 마다 원본에서 데이터 싱크를 해온다 ‘ㅅ’a

2024-12-19_093012

gitea 의 화면 구성은 github 과 비슷해 어렵지 않을 것이다.

 

  • 설정 변경

설치 화면에서 설정 할 수 있는 부분은 /admin 페이지에서 수정 되지 않는게 대부분 이다.
OPEN ID 차단 이나 회원 가입을 막는 부분등은 아래와 같이 /volume1/docker/gitea/gitea/conf/app.ini 설정 파일을 수정 해야 한다.

container를 사전에 정지 하고 파일 수정 한뒤에 다시 컨테이너를 시작 한다.

Docker 로그 설정

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

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

 

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

 

그리고 Docker 를 재시작 한다.

 

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

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