Thứ Sáu, 29 tháng 9, 2017

Cài đặt zabbix trên centos 6 qua docker

POINT TO SUCCESS!
INSTALL ZABBIX MONITORING SYSTEM via DOCKER on CENTOS 6


Trong bài trước, chúng ta đã thực hiện việc cài đặt zabbix trên centos 6 từ mã nguồn. Đó không phải là cách duy nhất để cài đặt zabbix. Trong bài này ta sẽ tìm hiểu một cách cài đặt zabbix siêu nhanh sử dụng docker.

Có lẽ docker vẫn còn khá xa lạ với nhiều người. Ta sẽ giới thiệu qua docker:

Trích từ Google:

Docker là một open platform cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất. Docker bao gồm: Docker Engine: Chứa các tool, engine để có thể đóng gói chương trình và vận hành chúng một cách đơn giản nhất.

Để tìm hiểu thêm về docker, tôi gợi ý một bài viết khá hay theo đường link: https://kipalog.com/posts/Toi-da-dung-Docker-nhu-the-nao

Chúng ta bắt đầu thực hiện việc cài đặt nào!


VM: CENTOS 6.9fRam: 2GBIP: 192.168.32.141

P1. Install docker

Hiện docker không còn hỗ trợ cho centos 6 nữa, bản cuối cùng là 1.70. Hơi cũ nhưng cũng đủ dùng để test :). Nếu cài đặt để dùng cho sản xuất, bạn nên cài trên bản linux đang được hỗ trợ.
[root@localhost ~]# yum install docker-io
[root@localhost ~]# service docker start
[root@localhost ~]# chkconfig docker on

P2. Tải các container cần thiết:

Các thành phần của zabbix được phân phói trong Ubuntu và Alpine linux container, nên ta sẽ load container này về trước:
[root@localhost ~]# docker pull ubuntu

Các container zabbix được phân phối trên https://github.com/zabbix/zabbix-docker
Truy cập để có thêm thông tin.

docke2

ta sẽ cài zabbix chạy trên nginx web server, sử dụng Database MySQL.
Các port chạy  mặc định.

* Load mysql container:

docker run --name mysql-server  -t \
 -e MYSQL_DATABASE="zabbix" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="123456" \
 -e MYSQL_ROOT_PASSWORD="123456" \
 -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin








* Java Gateway:

docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest



* Load zabbix-mysql:

docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest














* Load front-end:


docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest














Truy cập IP của server:

http://192.168.32.141/

Hiện lên màn hình đăng nhập zabbix
Đăng nhập bằng tài khoản mặt đinh: Admin / zabbix
Vậy là xong!!!
Kiểm tra xem các container đang chạy:

# docker ps -a




Note: Khi restart Iptables, cần restart lại docker và các container.

Thứ Năm, 28 tháng 9, 2017

Cài đặt zabbix 3.4 trên centos 6 từ mã nguồn

STEP TO SUCCESS!
ZABBIX INSTALLATION FROM SOURCE


Mục tiêu: build zabbix 3.4.2 từ mã nguồn

---------------------------------------------------------
System:
VM: CENTOS 6.9 F, IP: 192.168.32.142
PHP: 5.6
SQL: MYSQL 5.6
---------------------------------------------------------


Vì sao là Centos 6?


Chủ yếu là vì trên centos 7, ubuntu hay debian thì cài thẳng từ repo cho lẹ :). Ở VN mọi người vẫn rất hay dùng centos 6 - vì thói quen thôi.
Hiện trên centos 6 chỉ có thể cài zabbix_agent thông qua yum.
Đây chính là mục đích của bài viết này: Tự build zabbix trên centos 6 (latest release: centos 6.9F).


P1. Install MySql Server


*Install MySQL 5.6

# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm # wget https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
# rpm -ivh mysql57-community-release-el6-11.noarch.rpm

Sửa Nội dung file /etc/yum.repos.d/mysql-community.repo
....
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
....

* Cài đặt MySQL:

# yum install mysql-community-server mysql-community-devel

* Bảo mật MySql:

# service mysql start
# mysql_secure_installation

P2. Tải source Zabbix:

Các phiên bản Zabbix có thể tại tại:
https://sourceforge.net/projects/zabbix/files/
Tải Bản mới nhất: 3.4.2:
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.2/zabbix-3.4.2.tar.gz

# cd /usr/local/src/
# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.2/zabbix-3.4.2.tar.gz

Xả nén bộ cài:

# tar -xzvf zabbix-3.4.2.tar.gz


P3. Cài đặt Cơ sở dữ liệu cho Zabbix

* Tạo CSDL zabbix:

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.6.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye


* Import cấu trúc CSDL của zabbix :

# cd /usr/local/src/zabbix-3.4.2/database/mysql/
# mysql -u root -p -D zabbix < schema.sql
# mysql -u root -p -D zabbix < images.sql
# mysql -u root -p -D zabbix < data.sql

P4. Build Zabbix server và cấu hình:

* Cài đặt các thư viện cần thiết để build source:

# yum install gcc make libxml2-devel net-snmp-devel libcurl-devel libssh2-devel libevent-devel pcre-devel iksemel-devel java-1.8.0-openjdk-devel openldap-devel openssl-devel

* Tiến  hành build source:

# groupadd zabbix
# useradd -g zabbix zabbix
# cd /usr/local/src/zabbix-3.4.2
./configure --enable-server --enable-agent --prefix=/usr/local --sysconfdir=/etc/zabbix --enable-java --with-mysql --with-jabber --with-libcurl --with-net-snmp --with-ldap --with-iconv --with-libxml2 --with-openssl
# make
# make install
# chown zabbix:zabbix /var/log/zabbix/
# mkdir /var/run/zabbix/
# chown zabbix:zabbix /var/run/zabbix/

* Sửa file  /etc/zabbix/zabbix_server.conf thành:

LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=500
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
PidFile=/var/run/zabbix/zabbix_server.pid

* Sửa file  /etc/zabbix/zabbix_agentd.conf thành:

# This is a configuration file for Zabbix agent daemon (Unix)
# To get more information about Zabbix, visit http://www.zabbix.com
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=200
PidFile=/var/run/zabbix/zabbix_agent.pid
Server=127.0.0.1
StartAgents=5
ServerActive=127.0.0.1
Hostname=ZabbixServer
BufferSend=15
BufferSize=300
MaxLinesPerSecond=40
############ ADVANCED PARAMETERS #################
Timeout=5
User=zabbix
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

* Tạo file init script: /etc/init.d/zabbix-server

nội dung:


#!/bin/bash
#
# zabbix_server This shell script takes care of starting
#                       and stopping Zabbix Server daemon
#
# chkconfig: 35 96 14
# description: ZABBIX is an all-in-one 24x7 monitoring system
#

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0


RETVAL=0

# Setting up configuration
ZABBIX_NAME="zabbix_server"
ZABBIX_CONF="/usr/local/etc/$ZABBIX_NAME.conf"

if [ ! -f $ZABBIX_CONF ]
then
    echo "$ZABBIX_NAME configuration file $ZABBIX_CONF does not exist. "
    exit 3
fi

# Source config file to load configuration
. $ZABBIX_CONF

ZABBIX_USER="zabbix"
ZABBIX_BIND="/usr/local/sbin"
ZABBIX_BINF="$ZABBIX_BIND/$ZABBIX_NAME"

if [ ! -x $ZABBIX_BINF ] ; then
    echo "$ZABBIX_BINF not installed! "
    exit 4
fi

ZABBIX_LOGD="`dirname $LogFile`"
ZABBIX_LOGF="$LogFile"
if [ -z $ZABBIX_LOGF ]
then
    echo "LogFile path is not specified in $ZABBIX_CONF"
    exit 5
fi

ZABBIX_PIDF="$PidFile"
if [ -z $ZABBIX_PIDF ]
then
    echo "LogFile path is not specified in $ZABBIX_CONF"
    exit 5
fi


# Functions
runcheck() {
    [ ! -f $ZABBIX_PIDF ] && return 0
    PID=`cat $ZABBIX_PIDF`
    checkpid $PID
    [ $? -ne 0 ] && rm -f $ZABBIX_PIDF
}

pidofzab() {
    pidofproc -p "$ZABBIX_PIDF" $ZABBIX_NAME
}

start() {
    # Start daemons.
    echo -n $"Starting $ZABBIX_NAME: "
    if [ -n "`pidofzab`" ]; then
      echo -n "$ZABBIX_NAME: already running"
      failure
      echo
      return 1
    fi
    if [ ! -d $ZABBIX_LOGD ]; then
      mkdir -p $ZABBIX_LOGD
      chown $ZABBIX_USER $ZABBIX_LOGD
    fi
    runcheck
    daemon --user $ZABBIX_USER $ZABBIX_BINF -c $ZABBIX_CONF
    RETVAL=$?
    if [ -f $ZABBIX_PIDF ]; then
      chown $ZABBIX_USER $ZABBIX_PIDF
    fi
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$ZABBIX_NAME
    return $RETVAL
}

stop() {
    # Stop daemons.
    echo -n $"Shutting down $ZABBIX_NAME: "
    killproc $ZABBIX_NAME
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$ZABBIX_NAME
    return $RETVAL
}

# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  restart|reload)
stop
usleep 1000000
start
RETVAL=$?
;;
  condrestart)
if [ -f /var/lock/subsys/$ZABBIX_NAME ]; then
    stop
    usleep 1000000
    start
    RETVAL=$?
fi
;;
  status)
status $ZABBIX_NAME
RETVAL=$?
;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

exit $RETVAL

*Tạo file init script: /etc/init.d/zabbix_agentd có nội dung:


#!/bin/bash
#
# zabbix_agentd This shell script takes care of starting
#                       and stopping Zabbix Agent daemon
#
# chkconfig: 35 95 15
# description: ZABBIX is an all-in-one 24x7 monitoring system
#

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

RETVAL=0

# Setting up configuration
ZABBIX_NAME="zabbix_agentd"
ZABBIX_CONF="/etc/zabbix/$ZABBIX_NAME.conf"

if [ ! -f $ZABBIX_CONF ]
then
    echo "$ZABBIX_NAME configuration file $ZABBIX_CONF does not exist. "
    exit 3
fi

# Source config file to load configuration
. $ZABBIX_CONF

ZABBIX_USER="zabbix"
ZABBIX_BIND="/usr/local/sbin"
ZABBIX_BINF="$ZABBIX_BIND/$ZABBIX_NAME"

if [ ! -x $ZABBIX_BINF ] ; then
    echo "$ZABBIX_BINF not installed! "
    exit 4
fi

ZABBIX_LOGD="`dirname $LogFile`"
ZABBIX_LOGF="$LogFile"
if [ -z $ZABBIX_LOGF ]
then
    echo "LogFile path is not specified in $ZABBIX_CONF"
    exit 5
fi

ZABBIX_PIDF="$PidFile"
if [ -z $ZABBIX_PIDF ]
then
    echo "LogFile path is not specified in $ZABBIX_CONF"
    exit 5
fi


# Functions
runcheck() {
    [ ! -f $ZABBIX_PIDF ] && return 0
    PID=`cat $ZABBIX_PIDF`
    checkpid $PID
    [ $? -ne 0 ] && rm -f $ZABBIX_PIDF
}

pidofzab() {
    pidofproc -p "$ZABBIX_PIDF" $ZABBIX_NAME
}

start() {
    # Start daemons.
    echo -n $"Starting $ZABBIX_NAME: "
    if [ -n "`pidofzab`" ]; then
      echo -n "$ZABBIX_NAME: already running"
      failure
      echo
      return 1
    fi
    if [ ! -d $ZABBIX_LOGD ]; then
      mkdir -p $ZABBIX_LOGD
      chown $ZABBIX_USER $ZABBIX_LOGD
    fi
    runcheck
    daemon --user $ZABBIX_USER $ZABBIX_BINF -c $ZABBIX_CONF
    RETVAL=$?
    if [ -f $ZABBIX_PIDF ]; then
      chown $ZABBIX_USER $ZABBIX_PIDF
    fi
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$ZABBIX_NAME
    return $RETVAL
}

stop() {
    # Stop daemons.
    echo -n $"Shutting down $ZABBIX_NAME: "
    killproc $ZABBIX_NAME
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$ZABBIX_NAME
    return $RETVAL
}

# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  restart|reload)
stop
usleep 1000000
start
RETVAL=$?
;;
  condrestart)
if [ -f /var/lock/subsys/$ZABBIX_NAME ]; then
    stop
    usleep 1000000
    start
    RETVAL=$?
fi
;;
  status)
status $ZABBIX_NAME
RETVAL=$?
;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

exit $RETVAL

* Chạy server & agent:

# server zabbix_server start
# service zabbix_agentd start

P5. Cài đặt Zabbix web Frontend

Chúng ta sẽ sử dụng LAMP stack để chạy web server. Bước trên đã cài MySQL rồi, dưới đây ta cài PHP 5.6 và apache
Trên centos 6 để cài PHP 5.5 trở lên ta dùng remi repo

* Install epel remi repo


# wget https://rpms.remirepo.net/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
# nano /etc/yum.repos.d/remi.repo

=> Sửa Nội dung: /etc/yum.repos.d/remi.repo

...
[remi-php56]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/php56/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/6/php56/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/6/php56/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
...

* Cài dặt PHP 5.6 bằng lệnh  yum

# yum install php php-cli php-common php-devel php-pear php-fpm php-gd php-bcmath php-mbstring php-xml php-mysql php-xmlwriter php-ldap

* Cài đặt apache web server:

# yum install httpd httpd-devel


* Copy frontend source code vào thư mục chứa website:

# mkdir /var/www/html/zabbix
# cp -a /usr/local/src/zabbix-3.4.2/frontends/php/* /var/www/html/zabbix
# chown -R apache:apache /var/www/html/zabbix/

* Cấu hình php phù hợp với yêu cầu của Zabbix:

Pre-requisite
Minimum value
Description
PHP version
5.4.0
PHP memory_limit option
128MB
In php.ini:
memory_limit = 128M
PHP post_max_size option
16MB
In php.ini:
post_max_size = 16M
PHP upload_max_filesize option
2MB
In php.ini:
upload_max_filesize = 2M
PHP max_execution_time option
300 seconds (values 0 and -1 are allowed)
In php.ini:
max_execution_time = 300
PHP max_input_time option
300 seconds (values 0 and -1 are allowed)
In php.ini:
max_input_time = 300
PHP session.auto_start option
must be disabled
In php.ini:
session.auto_start = 0
PHP mbstring.func_overload option
must be disabled
In php.ini:
mbstring.func_overload = 0
PHP always_populate_raw_post_data option
must be disabled
Required only for PHP versions 5.6.0 or newer.
In php.ini:
always_populate_raw_post_data = -1
sockets
php-net-socket. Required for user script support.


Có thể sửa trực tiêp trong file /etc/php.ini
Hoặc dùng lệnh:

# sed -i 's/^max_execution_time.*/max_execution_time=300/' /etc/php.ini
# sed -i 's/^max_input_time.*/max_input_time=300/' /etc/php.ini
# sed -i 's/^post_max_size.*/post_max_size=32M/' /etc/php.ini
# sed -i 's/^upload_max_filesize.*/upload_max_filesize=16M/' /etc/php.ini
# sed -i "s/^\;date.timezone.*/date.timezone=\'Asia\/Bangkok\'/" /etc/php.ini
# sed -i "s/^\;always_populate_raw_post_data.*/always_populate_raw_post_data=-1/" /etc/php.ini

Để bảo mật, đổi port chạy của webserver:

# sed -i "s/^\Listen.*/Listen 8889/" /etc/httpd/conf/httpd.conf


* Khởi động apache:

# service httpd start


Tiếp theo cài đặt các thông số trên front-end: Nhập các thông số theo server đã tạo


DB: zabbix
DB Port: 3306
USER: zabbix
Passwod: 123456






Đăng nhập vào zabbix Dashboard


username: Admin
Password: zabbix

Vào phần Configuration/Host và enable host:


vậy là xong!