많은 서버들을 관리하기 위해서는 그 서버들의 상태를 알필요가 있다.
하지만, 많은 서버들의 상태를 실시간적으로 확인하기란 시간적/물리적으로도 무리수가 있다.
이런 고민과 문제를 해결하기 위해 많은 리소스를 사용하지 않고 많은 서버들을 관리 할 수 있는 오픈소스 네트워크 관제툴(Zabbx)을 간단하게 소개하겠다.
Zabbix는 수많은 종류의 네트워크 서비스, 서버 등 네트워크를 통해 하드웨어를 관제하여 관리자에게 장애 발생을 실시간으로 알 수있게 만들어진 네트워크 관리 시스템이다.
저자가 Zabbix 설치시에 사용되었던 OS.Spec 및 MW.Spec 정보는 아래와 같다.
#--------------------------------------------------------------------------------------------------------
#- OS Spec : Red Hat Enterprise Linux version 8 (HVM), EBS General Purpose (SSD) Volume Type
#- Os Detail : Red Hat Enterprise Linux release 8.2 (Ootpa)
#- MiddleWare Spec
#- PHP : PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )
#- MariaDB : Ver 9.1 Distrib 10.4.13-MariaDB, for Linux on x86_64
#- Nginx : nginx/1.16.1(Stable) + OpenSSL 1.1.1c
#- Zabbix : Zabbix 5.0 LTS
#--------------------------------------------------------------------------------------------------------
소개는 여기 까지하며, 본론으로 들어가서 설치 방법(Source)에 대해 기재한다.
설치 방법이 다소 복잡 할 수 있으나, 순서대로 진행한다면 클리어 할 수 있을 것이다.
Previous Setting(mariadb/php/nginx)
0. Selinux Firewall Daemon Service Disable & Stop & Policy Setting(root)
> 권한문제로 발생될 소지 사전에 예외처리진행(필수)
$ systemctl stop firewalld
$ systemctl disable firewalld
$ setsebool -P httpd_can_connect_zabbix on
$ setsebool -P httpd_can_network_connect_db on
$ setsebool -P httpd_read_user_content on
0-1. Account Create(root)
> DB(Maria)/PHP 제외한 실제 Frontend에서 동작하는 프로그램 권한/설치분리(보안)
>> nginx account create
$ export ID=nginx; export PASS=nginx1234;
$ useradd $ID -m -s /bin/bash
$ echo $PASS | passwd --stdin $ID
>> zabbix account create
$ export ID=zabbix; export PASS=zabbix1234;
$ useradd $ID -m -s /bin/bash
$ echo $PASS | passwd --stdin $ID
0-2. Account Profile Setting(nginx/zabbix)
> 경로 공통화 및 스크립트 간소화를 위한 파라메터 정의
$ su - nginx
$ su - zabbix
$ vi .bash_profile
################################################################################
#- nginx & zabbix account profile same setting
################################################################################
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
## Edit Server Env Setting
export ID=`whoami`
export BASE_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`
export PS1='[`id -nu`@`hostname`:$PWD]# '
export LANG=ko_KR.utf-8
stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" cs8 -ixany -parenb -istrip
## directory paths
export SCRIPT_DIR=${BASE_DIR}/scripts
export APP_DIR=${BASE_DIR}/appsw
################################################################################
0-3. Account Sudoers Set(root)
> zabbix/nginx 설치 시, sudo 권한 사용을 위한 권한 부여
$ vi /etc/sudoers
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL
nginx ALL=(ALL) NOPASSWD:ALL
0-4. Require Lib Install(root)
> ZABBIX / PHP / NGINX 설치 SO(Shared Object) 사용을 위한 필수 라이브러리 설치(필수)
@@zabbix required libraries(make wget gcc gcc-c++ libpcre libevent libpthread zlib OpenIPMI libssh2 fping libcurl libxml2 ldap mysqli net-snmp)
$ yum install -y make wget gcc gcc-c++ net-snmp-devel libevent-devel libcurl-devel OpenIPMI pcre-devel zlib zlib-devel libssh2 libxml2-devel curl curl-devel pcre-devel pcre2-devel
@@php required libraries(php php-gd php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter php-session php-net-socket php-mbstring php-gettext php-ldap php-mysql)
$ yum install -y php php-gd php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter php-mbstring php-gettext php-ldap php-json php-mysqlnd
@@nginx required libraries(perl perl-ExtUtils-Embed libxslt libxml2 gd GeoIP)
$ yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd-devel
$ yum -y update
0-5. Install & Setting MariaDB(latest_version)(root)
> MARIADB 설치 및 ZABBIX Compile Header 사용을 위한 필수 라이브러리 설치(필수)
> DB 다운대비 헬스체크 스크립트작성/스케쥴러등록
$ curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
$ yum install MariaDB-client MariaDB-server mariadb-devel
>> if dosen't work(lower version install)
$ vi /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB Server
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ yum install MariaDB-client MariaDB-server mariadb-devel
>> if dependency error
$ yum install --allowerasing mariadb-devel
>>Another Way DB(mysql)
@@mysql required libraries
$ yum -y install mysql mysql-server mysql-devel
$ service mysqld start
>> 계속진행(MariaDB)
$ systemctl start mariadb
$ systemctl enable mariadb
$ '/usr/bin/mysqladmin' -u root password 'maria1234'
$ '/usr/bin/mysql_secure_installation'
> Enter current password for root (enter for none): maria1234
> Switch to unix_socket authentication [Y/n] n
> Change the root password? [Y/n] n
> Remove anonymous users? [Y/n] Y
> Disallow root login remotely? [Y/n] Y
> Remove test database and access to it? [Y/n] Y
> Reload privilege tables now? [Y/n] Y
$ vi /etc/my.cnf.d/client.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
$ vi /etc/my.cnf.d/server.cnf
[mysqld]
character_set_server=utf8
collation-server=utf8_bin
init_connect="SET NAMES utf8 collate utf8_bin"
port = 3306
socket = /var/lib/mysql/mysql.sock
innodb_file_per_table=1
innodb_buffer_pool_size = 768M # attention to the parameter! set about 2 times less than the amount of server RAM
innodb_buffer_pool_instances=1 # increase by 1 each GB innodb_buffer_pool_size
innodb_flush_log_at_trx_commit = 0
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
$ systemctl restart mariadb
$ systemctl status mariadb.service
$ '/usr/bin/mysqld_safe' --datadir=/var/lib/mysql
$ mysql -uroot -pmaria1234
mysql> show grants for 'root'@'localhost';
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*078BB33244157DC3D5DB501F7814342A3648A216' OR unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
mysql> create user 'zabbix'@'localhost' identified BY 'zabbix';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
mysql> grant proxy on ''@'%' to 'zabbix'@'localhost' with grant option;
mysql> show grants for 'zabbix'@'localhost';
+---------------------------------------------------------------------------------------------------------------------------------+
| Grants for zabbix@localhost |
+---------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `zabbix`@`localhost` IDENTIFIED BY PASSWORD '*DEEF4D7D88CD046ECA02A80393B7780A63E7E789' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `zabbix`.* TO `zabbix`@`localhost` |
| GRANT PROXY ON ''@'%' TO 'zabbix'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
mysql> flush privileges;
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> show databases;
mysql> use zabbix;
mysql> show tables;
mysql> quit
$ sudo mysqladmin --version
$ netstat -an | grep LISTEN
$ ps -ef | grep mysql
$ mkdir /root/scripts
$ vi /root/scripts/maria_db_health_chk.sh
#!/bin/bash
#---------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#---------------------------------------
set -o nounset
set -o errexit
#---------------------------------------
# // Check Parameter & Define Variable
#---------------------------------------
daemon_name="mysqld"
valid_name="mysqld_safe|grep"
ps_chk=`ps -ef | grep "${daemon_name}" | egrep -v "${valid_name}" | wc -l`
#---------------------------------------
# // Action Scripts
#---------------------------------------
if [[ ${ps_chk} -eq 1 ]]; then
echo "[ INFO ] ${daemon_name} is working."
else
echo "[ ERROR ] ${daemon_name} is dead."
echo "[ ERROR ] ${daemon_name} will start."
systemctl start mariadb
fi
$ crontab -e
# MariaDB Health Check Script
*/5 * * * * sh /root/scripts/maria_db_health_chk.sh
0-6. Setting PHP-FPM(root)
> WEB을 통해 실행되는 PHP 파일로딩을 위한 PHP-FPM 설정 및 기동
> PHP-FPM 다운대비 헬스체크 스크립트 작성/스케쥴러등록
$ systemctl start php-fpm
$ systemctl enable php-fpm
$ ps -ef | grep php
$ vi /etc/php-fpm.d/www.conf
########################################
#- Modify Parameters
########################################
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
##########################################
$ systemctl restart php-fpm
$ ls -lrt /var/run/php-fpm/php-fpm.sock
$ chown -R nginx:nginx /var/lib/php/session
$ vi /root/scripts/php-fpm_health_chk.sh
#!/bin/bash
#---------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#---------------------------------------
set -o nounset
set -o errexit
#---------------------------------------
# // Check Parameter & Define Variable
#---------------------------------------
daemon_name="php-fpm: master"
valid_name="www|grep"
ps_chk=`ps -ef | grep "${daemon_name}" | egrep -v "${valid_name}" | wc -l`
#---------------------------------------
# // Action Scripts
#---------------------------------------
if [[ ${ps_chk} -eq 1 ]]; then
echo "[ INFO ] ${daemon_name} is working."
else
echo "[ ERROR ] ${daemon_name} is dead."
echo "[ ERROR ] ${daemon_name} will start."
systemctl start php-fpm
fi
$ crontab -e
# php-fpm Health Check Script
*/5 * * * * sh /root/scripts/php-fpm_health_chk.sh
0-7. Install & Setting Nginx
> 와부 브라우저 호출/접근 수용을 위한 WEB서버 설치 및 PHP-FPM 바인딩설정
> NGINX 컨트롤을 위한 스크립트작성(기동/정지/재기동/리로드/상태확인)
$ su - nginx
$ mkdir ${APP_DIR}
$ export SERV_DIR=${BASE_DIR}/nginx
$ cd ${APP_DIR}; wget https://nginx.org/download/nginx-1.16.1.tar.gz
$ tar zxf nginx-1.16.1.tar.gz
$ cd ${APP_DIR}/nginx-1.16.1
$ sudo cp ${APP_DIR}/nginx-1.16.1/man/nginx.8 /usr/share/man/man8
$ sudo gzip /usr/share/man/man8/nginx.8
$ man nginx
$ ./configure \
--prefix=${SERV_DIR} \
--with-pcre \
--with-http_ssl_module \
--with-stream \
--with-http_stub_status_module \
--with-mail
$ sudo make install
$ sudo mkdir -p ${SERV_DIR}/html/zabbix
$ sudo chown -R nginx:nginx ${SERV_DIR}
$ sudo chown root:nginx ${SERV_DIR}/sbin/nginx
$ sudo chmod +s ${SERV_DIR}/sbin/nginx
$ cp ${SERV_DIR}/conf/nginx.conf ${SERV_DIR}/conf/nginx.conf_ori
$ vi ${SERV_DIR}/conf/nginx.conf
user nginx;
worker_processes 4;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
autoindex off;
server_tokens off;
include conf.d/*.conf;
}
$ mkdir ${SERV_DIR}/conf/conf.d
$ vi ${SERV_DIR}/conf/conf.d/default.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
client_max_body_size 5m;
client_body_buffer_size 128k;
location = /stub_status {
stub_status on;
access_log off;
#allow 127.0.0.1;
#deny all;
allow all;
}
location / {
root /home/nginx/nginx/html/zabbix;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param PHP_VALUE "
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
date.timezone = Asia/Seoul
";
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}
location ~ /\.ht {
deny all;
allow all;
}
location ~ /\. {
deny all;
allow all;
}
proxy_intercept_errors on;
error_page 404 500 502 503 504 /50x.html;
location = /50x.html {
root /nginx/nginx/html;
internal;
}
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 444;
}
}
}
$ cd ${SERV_DIR}/sbin; ./nginx -t
$ cd ${SERV_DIR}/sbin; ./nginx
$ netstat -tulpn | grep nginx
$ mkdir ${SCRIPT_DIR}
$ vi ${SCRIPT_DIR}/nginx_ctrl.sh
#!/bin/bash
#--------------------------------------------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#--------------------------------------------------------------------------
#set -o nounset
#set -o errexit
#--------------------------------------------------------------------------
# // Check Parameter & Define Variable
#--------------------------------------------------------------------------
source /home/nginx/.bash_profile
if [[ $# -lt 1 ]]; then
if [[ $# != $1 ]]; then
echo
echo "[ ERROR ] NOT FOUND CMD : ($1)"
echo "[ INFO ] ex ) ./nginx_ctrl.sh {start|stop|restart|reload}"
echo
exit 1
fi
fi
ARGS1=$1
#- PATHS
APP_NAME=nginx_ctrl
ID=`id -u -n`
SCT_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`/scripts
APP_DIR=/home/nginx/nginx
LOG_DIR=${SCT_DIR}/logs
#- ETC
TIMESTAMP=`date +%Y%m%d-%H%M%S`
CHECK_DATE=`date +%Y-%m-%d`
DATE=`date +%Y%m%d`
#- CMD_LIST
CMD_LIST=("start" "stop" "restart" "reload" "pscheck")
#- PID COUNT
PIC=`ps -ef | egrep -i "master process|worker process" | grep -v "grep" | wc -l`
#---------------------------------------------------------------
# // Validate Parameter & Run Script
#---------------------------------------------------------------
func_main() {
echo
echo "[ INFO ] func_main"
func_chk_dir ${LOG_DIR}
export CMD=$(func_chk_parm ${ARGS1} CMD_LIST)
if [[ -z ${CMD} ]]; then
echo
echo "[ ERROR ] PLEASE CHECK YOUR CMD ARGUMENT_1 : ${ARGS1}"
echo "[ INFO ] ex ) ./${APP_NAME}.sh {start|stop|restart|reload}"
echo
exit 1
fi
func_remove ${LOG_DIR}
func_cmd ${APP_DIR}/sbin ${APP_NAME} ${CMD} CMD_LIST ${PIC} 2>&1 | tee "${LOG_DIR}/${APP_NAME}_${CMD}_${TIMESTAMP}".log
}
func_remove() {
local VAL1=$1
echo
echo "[ INFO ] func_remove"
echo "[ INFO ] cd ${VAL1}; find ./* -name '*.log' -mtime +7 | xargs -n1 rm -f"
cd ${VAL1}; find ./* -name "*.log" -mtime +7 | xargs -n1 rm -f
}
func_cmd() {
local VAL1=$1
local VAL2=${2%%_*}
local VAL3=$3
local VAL4=$4[@]
local VAL4=("${!VAL4}")
local VAL5=$5
echo
echo "[ INFO ] func_cmd"
if [[ ${VAL3} == ${VAL4[0]} ]]; then
func_valid_proc ${VAL5} ${VAL3} $4
echo "[ INFO ] cd ${VAL1}; ${VAL2}"
cd ${VAL1}; ${VAL2}
func_chk_proc ${VAL2} $2
elif [[ ${VAL3} == ${VAL4[1]} ]]; then
func_valid_proc ${VAL5} ${VAL3} $4
echo "[ INFO ] cd ${VAL1}; ${VAL2} -s ${VAL3}"
cd ${VAL1}; ${VAL2} -s ${VAL3}
func_chk_proc ${VAL2} $2
elif [[ ${VAL3} == ${VAL4[4]} ]]; then
func_chk_proc ${VAL2} $2
else
echo "[ INFO ] cd ${VAL1}; ${VAL2} -s ${VAL3}"
cd ${VAL1}; ${VAL2} -s ${VAL3}
func_chk_proc ${VAL2} $2
fi
}
func_valid_proc() {
local VAL1=$1
local VAL2=$2
local VAL3=$3[@]
local VAL3=("${!VAL3}")
if [[ ${VAL2} == ${VAL3[0]} ]]; then
if [[ ${VAL1} -gt 1 ]]; then
echo "[ INFO ] NGINX is Already ${VAL2}ed."
echo "[ INFO ] exit."
exit 0
fi
elif [[ ${VAL2} == ${VAL3[1]} ]]; then
if [[ ${VAL1} -lt 1 ]]; then
echo "[ INFO ] NGINX is Already ${VAL2}ed."
echo "[ INFO ] exit."
exit 0
fi
fi
}
func_chk_proc() {
local VAL1=$1
local VAL2=$2
echo
echo "[ INFO ] func_chk_proc"
echo "ps -ef | grep ${VAL1} | grep -v grep | grep -v ${VAL2}"
ps -ef | grep ${VAL1} | grep -v "grep" | grep -v "${VAL2}"
}
func_chk_parm() {
local VAL1=$1
local VAL2=$2[@]
local VAL2=("${!VAL2}")
for VALID in ${VAL2[@]} ;do
if [[ ${VAL1} == ${VALID%/*} ]]; then
echo "${VAL1}"
else
continue
fi
done
}
func_chk_dir() {
local VAL1=$1
echo
echo "[ INFO ] func_chk_dir"
if [[ ! -d ${VAL1} ]]; then
echo "[ INFO ] mkdir -p ${VAL1}"
mkdir -p ${VAL1}
fi
}
func_main
$ chmod 755 ${SCRIPT_DIR}/nginx_ctrl.sh
$ vi /home/nginx/.bash_profile
#- user log alias
alias webstart='sh ${SCT_DIR}/nginx_ctrl.sh start'
alias webstop='sh ${SCT_DIR}/nginx_ctrl.sh stop'
alias webreload='sh ${SCT_DIR}/nginx_ctrl.sh reload'
alias pscheck='sh ${SCT_DIR}/nginx_ctrl.sh pscheck'
$ source /home/nginx/.bash_profile
$ pscheck
Main Setting(zabbix)
0. Install & Setting Zabbix(Server)
> 모니터링 및 관제 수용을 위한 메인 컨트롤 관리서버 설치
$ su - zabbix
$ export SERV_DIR=${BASE_DIR}/server
$ mkdir ${SERV_DIR} ${SERV_DIR}/logs ${APP_DIR} ${SCRIPT_DIR}; ls -lrt ${BASE_DIR}
$ cd ${APP_DIR}
$ wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.0.tar.gz
$ tar -zxvf zabbix-5.0.0.tar.gz
#! If you are installing Zabbix from sources, proceed to import the data into the database.
For a Zabbix proxy database, only schema.sql should be imported (no images.sql nor data.sql):
$ cd ${APP_DIR}/zabbix-5.0.0/database/mysql
$ sudo mysql -uzabbix -pzabbix zabbix < schema.sql
#! stop here if you are creating database for Zabbix proxy
$ sudo mysql -uzabbix -pzabbix zabbix < images.sql
$ sudo mysql -uzabbix -pzabbix zabbix < data.sql
$ cd ${APP_DIR}/zabbix-5.0.0; ./configure --help
$ ./configure --prefix=${SERV_DIR} \
--enable-server \
--enable-agent \
--with-mysql \
--enable-ipv6 \
--with-net-snmp \
--with-libcurl \
--with-libxml2
$ sudo make install
$ sudo chown -R zabbix:zabbix ${SERV_DIR}
$ sudo cp -Rf ${APP_DIR}/zabbix-5.0.0/ui/* /home/nginx/nginx/html/zabbix/
$ sudo chown -R nginx:nginx /home/nginx/nginx/html/zabbix
$ sudo chcon -R -t httpd_sys_rw_content_t /home/nginx/nginx/html/zabbix
$ sudo ls -alZ /home/nginx/nginx/html/zabbix
$ vi ${SERV_DIR}/etc/zabbix_server.conf
########################################
#- Modify Parameters
########################################
LogFile=/home/zabbix/server/logs/zabbix_server.log
DBHost=localhost
DBPassword=zabbix
ListenIP=127.0.0.1
Timeout=10
########################################
$ vi ${SERV_DIR}/etc/zabbix_agentd.conf
########################################
#- Modify Parameters
########################################
LogFile=/home/zabbix/server/logs/zabbix_agentd.log
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
########################################
$ vi ${SCRIPT_DIR}/zabbix_ctrl.sh
#!/bin/bash
#--------------------------------------------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#--------------------------------------------------------------------------
#set -o nounset
set -o errexit
#--------------------------------------------------------------------------
# // Check Parameter & Define Variable
#--------------------------------------------------------------------------
if [[ $# -lt 2 ]]; then
if [[ $# != $1 && $# != $2 ]]; then
echo
echo "[ ERROR ] NOT FOUND PLF & CMD : ($1) ($2)"
echo "[ INFO ] ex ) ./zabbix_ctrl.sh (server or agentd)(start or stop or log)"
echo
exit 1
fi
fi
PLF=$1
CMD=$2
LOG_DIR=${SCRIPT_DIR}/logs
APP_DIR=${BASE_DIR}/server
APP_LOG_DIR=${APP_DIR}/logs
PLF_LIST=("server" "agentd")
CMD_LIST=("log" "start" "stop")
DIR_LIST=("${LOG_DIR}")
DATE=`date +%Y%m%d-%H%M%S`
UNAME=`id -u -n`
APP_USER="zabbix"
#---------------------------------------------------------------
# // Validate Parameter & Run Script
#---------------------------------------------------------------
func_main() {
func_dir_chk DIR_LIST
export MW=$(func_parm_chk ${PLF} PLF_LIST)
export ACT=$(func_parm_chk ${CMD} CMD_LIST)
if [[ -z ${MW} ]]; then
echo
echo "[ ERROR ] PLEASE CHECK PARAMETER PLF: ${MW}"
echo "[ INFO ] ex ) ./zabbix_ctrl.sh (server or agentd)(start or stop or log)"
echo
exit 1
fi
if [[ -z ${ACT} ]]; then
echo
echo "[ ERROR ] PLEASE CHECK PARAMETER CMD : ${ACT}"
echo "[ INFO ] ex ) ./zabbix_ctrl.sh (${MW})(start or stop or log)"
echo
exit 1
fi
export LOG_NM=${APP_LOG_DIR}/${APP_USER}_${MW}.log
export PID=$(func_pid_chk "${APP_USER}_${MW}.conf")
func_user_chk ${APP_USER} ${UNAME}
func_ctrl CMD_LIST ${ACT} ${LOG_NM} ${APP_DIR} ${APP_USER}_${MW} ${PID}
}
func_dir_chk() {
local VALS=$1[@]
local VALS=("${!VALS}")
for VAL in "${VALS[@]}"; do
func_make_dir ${VAL}
done
}
func_make_dir() {
local VAL1=$1
if [[ ! -d ${VAL1} ]]; then
echo "[ INFO ] mkdir -p ${VAL1}"
mkdir -p ${VAL1}
fi
}
func_parm_chk() {
local VAL1=$1
local VAL2=$2[@]
local VAL2=("${!VAL2}")
for VALID in ${VAL2[@]} ;do
if [[ ${VAL1} == ${VALID%/*} ]]; then
echo "${VAL1}"
else
continue
fi
done
}
func_user_chk() {
local VAL1=$1
local VAL2=$2
if [[ ${VAL1} != ${VAL2} ]]; then
echo "[ INFO ] CAN BE START (${VAL2}) USER ONLY."
exit 1;
fi
}
func_pid_chk() {
local VAL1=$1
local VAL2=`ps -ef | grep ${VAL1} | grep -v "grep" | awk '{print $2}'`
if [[ ! -z ${VAL2} ]]; then
echo "${VAL2}"
fi
}
func_ctrl() {
local VAL1=$1[@]
local VAL1=("${!VAL1}")
local VAL2=$2
local VAL3=$3
local VAL4=$4
local VAL5=$5
local VAL6=$6
if [[ ${VAL2} = "${VAL1[0]}" ]]; then
echo "[ INFO ] tail -f ${VAL3}"
tail -f ${VAL3}
elif [[ ${VAL2} = "${VAL1[1]}" ]]; then
if [[ -z ${VAL6} ]]; then
echo "[ INFO ] ${VAL5} process is ${VAL2}."
${VAL4}/sbin/${VAL5} -c ${VAL4}/etc/${VAL5}.conf
func_pid_chk ${VAL5}.conf
else
echo "[ INFO ] ${VAL5} process is already ${VAL2}ed."
exit 0;
fi
elif [[ ${VAL2} = "${VAL1[2]}" ]]; then
if [[ -z ${VAL6} ]]; then
echo "[ INFO ] ${VAL5} process is already ${VAL2}ed."
exit 0;
else
echo "[ INFO ] ${VAL5} process is ${VAL2}."
killall -9 ${VAL5}
func_pid_chk ${VAL5}.conf
fi
fi
}
func_main
$ chmod 755 ${SCRIPT_DIR}/zabbix_ctrl.sh
$ vi /home/zabbix/.bash_profile
## user alias
alias zs_start='sh ${SCRIPT_DIR}/zabbix_ctrl.sh server start'
alias zs_stop='sh ${SCRIPT_DIR}/zabbix_ctrl.sh server stop'
alias zs_log='sh ${SCRIPT_DIR}/zabbix_ctrl.sh server log'
alias za_log='sh ${SCRIPT_DIR}/zabbix_ctrl.sh agentd log'
alias za_start='sh ${SCRIPT_DIR}/zabbix_ctrl.sh agentd start'
alias za_stop='sh ${SCRIPT_DIR}/zabbix_ctrl.sh agentd stop'
$ source /home/zabbix/.bash_profile
$ zs_start
$ za_start
※ 추후, Agent 설치가이드 기재(일정미정)
#- References
[mariadb]mysql_install_db_options
[mariadb]configuring-mariadb-with-option-files
[zabbix]requirements_installation_libraries
[zabbix]running-zabbix-web-ui-with-nginx-and-php-fpm
'인프라 > MW' 카테고리의 다른 글
[Jboss&Weblogic] Encrypting Data Source Passwords (0) | 2019.12.31 |
---|---|
[GitLab] ID/PASSWORD STORE AFTER EASY GIT CLONE(SSH Key include Client between Server) (0) | 2019.12.26 |
[GitLab/Linux or Unix] password reset (Root/Admin) (0) | 2019.12.20 |
(Keystore)Self-Signed-Cert-Trust-Manager(InstallCert.java) (0) | 2019.10.16 |
SVN(Subversion) (0) | 2019.09.26 |