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!



Bổ xung: Cho những ai thích màu mè.

POINT TO SUCCESS: Cài đặt grafana kết hợp với zabbix.

Mọi thông tin & cài đặt cho các phiên bản linux đều có tại trang chủ:

http://docs.grafana.org/installation/
Ta sẽ cài luôn trên centos vừa cài zabbix:

* Cài grafana-server trực tiếp từ RPM:

* Tải grafana-server RPM package:

# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.5.2-1.x86_64.rpm
# yum install initscripts fontconfig urw-fonts
# rpm -Uvh grafana-4.5.2-1.x86_64.rpm
# service grafana-server start

* Cài plugin cho zabbix:

# grafana-cli plugins install alexanderzobnin-zabbix-app
# service grafana-server restart

Xong, tiếp theo cấu hình trên giao diện web của grafana:

Truy cập http://IP_SERVER_ZABBIX:3000/username: admin Password: admin

Đăng nhập thành công, vào DASHBOARD => DATASOURCE =>> Add Data Source


Nhập tên: ZabbixType: Chọn ZabbixUrl http://IP_SERVER:PORT/zabbix/api_jsonrpc.phpSample: http://192.168.32.142:8889/zabbix/api_jsonrpc.phpPhần Zabbix API nhập tên đăng nhập zabbix.


Mọi thứ khác để mặc định

Click Add, nếu thành công sẽ báo:

Bấm save & test

Quay về Dashboard và tận hưởng thành quả:



Không có nhận xét nào:

Đăng nhận xét