【1】按部就班學 Zabbix :初識與基礎依賴環境搭建( LNMP )

 

 

寫在前面的話

 

運維監控是一個很大的話題,在這一塊我的接觸的比較突出的服務主要有 Nagio 和 Zabbix 兩款。而這幾年跳過的公司中,Zabbix 一直都是首選且惟一選擇,Nagios 沒遇到。javascript

我的算是從 2.2 開始接觸的 Zabbix ,但那時我只是 Help desk,主要工做是接受監控告警和將故障通知到指定的人,而不是配置服務。現在已經或多或少用了兩三年 Zabbix 了,版本也迭代到了 3.4.10。php

最近恰逢換完工做,公司的不少東西須要從零開始搭建,因此準備抽空寫一些東西,一是做爲筆記保留,二是給準備作運維或者剛學習運維的兄弟作個參考。css

固然,網上的資料不少,可是不少都講的太詳細了,對於我這種比較菜的一是看一半就想睡覺,二是抓不住重點,因而我把本身的學習通過寫下來,內容可能不深,但勉強夠用。標題取名 "按部就班學 Zabbix",算是但願可以在寫的過程當中慢慢完善本身。html

最後,文中可能有寫的有問題的地方,但願各位可以指出。固然,若是你以爲還不錯,合你的口味,也但願你可以點贊支持,讓我至少知道這些東西仍是有人在認真看的~ java

 

 

Zabbix 介紹

 

網上對於 Zabbix 的解釋不少,我這裏挑簡單的說:mysql

一、它是一款開源,使用 C 語言編寫的分佈式監控服務,包含 Server 和 Agent 兩個部分ios

二、在系統資源,服務狀態性能監控等方面具備優異的表現nginx

三、可以自定義監控模板,具備較高的定製性c++

四、可以將監控結果以圖形化展現出來,對於須要出具報告的運維人員來講至關實用且友好等等等特色web

...

 

主要的幾個程序:

一、zabbix_server:zabbix 服務端核心服務,事務處理都在於它 

二、zabbix_agentd: 客戶端守護進程,此進程收集客戶端數據,例如 CPU負載、內存、硬盤使用狀況等

三、zabbix_get:主要用於測試監控項是否可以正常使用

四、zabbix_sender: 用於發送給 server 或者 proxy,一般用於耗時比較長的檢查,避免超時

五、zabbix_proxy: 特殊的網絡環境能夠做爲一箇中轉站,從 agent 到 proxy 再到 server 這樣實現

...

 

原理圖:上面說的太片面,因而決定畫張圖來簡單說明一下它的主要工做方式! 

 

環境說明

 

Zabbix 自己能夠直接使用自帶的腳本運行,可是其 WEB 端是 PHP 寫的,因此咱們就須要搭建 LNMP 環境。

如下是我本機的虛擬機環境所選擇的版本:

服務
版本
操做系統
CENTOS 7.5
NGINX
nginx-1.10.2
MySQL
percona-server-5.7.11-4( MySQL 的分支 )
PHP
php-7.0.30

 

虛擬機環境:

服務器
IP
配置
Zabbix Server
192.168.200.101
4G 內存
Zabbix Agent
192.168.200.102
4G 內存

 

特殊說明:本人比較推薦源碼編譯安裝,不少東西路徑本身定製,這應該算是一個運維須要具有的基礎技能,雖然 Zabbix ,LNMP 環境均可以 yum 安裝,很方便,可是我的極其不推薦!

緣由:我身邊不少同行包括我特別反感,你卻是舒舒服服想怎麼來就怎麼來,結果哪天你忽然離職,別人接手你的鍋還得一個一個機器的去梳理,又沒文檔,有的涉及到遷移的,麻煩的一批,由於誰也不知道你到底幹了什麼騷操做,接盤俠絕對在背地裏不知道罵了你多少句CNM,DSB!

我的認爲,規範化對於運維來講極其重要,運維你自己的很大一部分工做就是讓公司的服務器規範化管理起來!

 

文中因此須要的安裝包我都放到了百度網盤,須要的兄弟能夠去下載:

連接:https://pan.baidu.com/s/14u6r5V7sELN8NNErGp48NA 密碼:g9xy

 

 

安裝 NGINX

 

所需安裝包: 我的用到的比較多,常見的一些模塊也都增長了

安裝包
nginx-1.10.2.tar.gz
nginx-upload-module-2.2.zip
nginx-upstream-fair-master.zip
ngx_cache_purge-2.3.tar.gz
openssl-1.1.0c.tar.gz
pcre-8.39.tar.gz
zlib-1.2.8.tar.gz

 

目錄說明: 

用途
目錄
安裝包路徑
/opt/packages/nginx
安裝路徑
/opt/services/nginx
日誌路徑
/opt/logs/nginx

 

備註:這些目錄是我的的習慣,我把全部關於用戶安裝的東西都儘可能限制在一個目錄,方便管理

 

【1】建立相應的用戶與目錄:

# 建立目錄
mkdir /opt/services
mkdir -p /opt/logs/nginx
mkdir -p /opt/packages/nginx

# 建立監聽用戶
useradd www -s /sbin/nologin

 

【2】安裝依賴:

yum -y install zip unzip gcc gcc-c++ automake autoconf libtool make glibc gd-devel pcre-devel libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libevent libevent-devel

 

【3】上傳包到 /opt/packages/nginx 目錄並解壓編譯安裝:

# 解壓安裝包
cd /opt/packages/nginx

tar -zxf nginx-1.10.2.tar.gz 
unzip nginx-upload-module-2.2.zip 
unzip nginx-upstream-fair-master.zip 
tar -zxf ngx_cache_purge-2.3.tar.gz 
tar -zxf openssl-1.1.0c.tar.gz 
tar -zxf pcre-8.39.tar.gz 
tar -zxf zlib-1.2.8.tar.gz 

# 編譯安裝
cd nginx-1.10.2

./configure --prefix=/opt/services/nginx --user=www --group=www --with-http_realip_module --with-http_stub_status_module --with-stream  --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-http_mp4_module --with-http_realip_module --with-pcre=/opt/packages/nginx/pcre-8.39 --with-openssl=/opt/packages/nginx/openssl-1.1.0c --with-zlib=/opt/packages/nginx/zlib-1.2.8 --with-http_v2_module --with-ipv6 --with-http_image_filter_module --add-module=/opt/packages/nginx/nginx-upload-module-2.2 --add-module=/opt/packages/nginx/nginx-upstream-fair-master --add-module=/opt/packages/nginx/ngx_cache_purge-2.3

make && make install

 

【4】初始化配置 NGINX:

# 建立額外配置文件目錄,方便管理
mkdir /opt/services/nginx/conf/vhosts

# 簡單的配置優化
vim /opt/services/nginx/conf/nginx.conf

 

配置文件內容:

user  www www;
worker_processes  4;
error_log  /opt/logs/nginx/error.log;
pid        /opt/logs/nginx/nginx.pid;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections  65535;
}
 
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  /opt/logs/nginx/access.log  main;
 
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;
   
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    fastcgi_param HTTP_PROXY "";
   
    proxy_hide_header X-Powered-By;
    proxy_hide_header X-Forwarded-For;
    proxy_hide_header X-AspNet-Version;
    proxy_hide_header X-AspNetMvc-Version;
    proxy_hide_header Via;
    proxy_hide_header X-Varnish;
    proxy_hide_header Server;
   
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 5;
    gzip_disable "MSIE [1-6]\.";
    gzip_types text/plain text/css text/xml application/javascript application/x-javascript;
    gzip_vary on;
   
    include vhosts/*.conf;
}

 

【5】添加到開機自啓動:

# 受權
chmod 777 /etc/rc.local

# 加入開機啓動
echo '' >> /etc/rc.local
echo '# nginx startup' >> /etc/rc.local
echo '/opt/services/nginx/sbin/nginx &' >> /etc/rc.local

 

【6】NGINX 安裝完成,接下來安裝 MySQL!

 

 

安裝 MySQL

 

所需安裝包:

安裝包
percona-server-5.7.11-4.tar.gz
cmake-3.5.2.tar.gz
boost_1_59_0.tar.gz

 

目錄說明: 

用途
目錄
安裝包路徑
/opt/packages/mysql
安裝路徑
/opt/services/mysql
日誌路徑
/opt/logs/mysql

 

【1】建立相應的用戶與目錄:

# 建立目錄
mkdir -p /opt/logs/mysql
mkdir -p /opt/packages/mysql

# 建立監聽用戶
useradd mysql -s /sbin/nologin

 

【2】安裝依賴: 

yum -y install gcc gcc-devel gcc-c++ gcc-c++-devel libaio-devel boost boost-devel autoconf* automake* zlib* libxml* ncurses-devel ncurses libgcrypt* libtool* cmake openssl openssl-devel bison bison-devel unzip numactl-devel net-snmp-devel net-snmp-utils readline*

 

【3】將安裝包上傳到 /opt/packages/mysql ,而後編譯安裝:安裝時間較長,20 多分鐘左右

# 解壓
cd /opt/packages/mysql
tar -zxf cmake-3.5.2.tar.gz 
tar -xzf boost_1_59_0.tar.gz 
tar -zxf percona-server-5.7.11-4.tar.gz

# 編譯安裝 CMAKE
cd cmake-3.5.2
./configure 
gmake && make install

# 查看安裝結果
cmake --version

# 編譯安裝 MySQL
cd ../percona-server-5.7.11-4

cmake . -DCMAKE_INSTALL_PREFIX=/opt/services/mysql -DWITH_BOOST=/opt/packages/mysql/boost_1_59_0/ -DMySQL_DataDIR=/opt/services/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_EDITLINE=bundled -DENABLED_LOCAL_INFILE=1 -DZLIB_INCLUDE_DIR:PATH=/usr/include -DENABLE_DOWNLOADS=1

make -j4 && make install

# 受權目錄
chown -R mysql:mysql /opt/logs/mysql

# 配置 MySQL
vi /etc/my.cnf

 

內容以下:

[client]
port= 3306
socket=/opt/logs/mysql/mysql.sock

[mysqld]
port=3306
datadir=/opt/services/mysql/data
basedir=/opt/services/mysql
socket=/opt/logs/mysql/mysql.sock

character_set_server=utf8
user=mysql

# 指定日誌和pid位置
log-error=/opt/logs/mysql/mysql-error.log
pid-file=/opt/logs/mysql/mysqld.pid

# 開啓查詢緩存,注意5.1版本若是報錯的話,把下面一行註釋掉
explicit_defaults_for_timestamp=true

# 關閉符號連接支持
symbolic-links=0

# 不區分大小寫
lower_case_table_names=1

# 禁用DNS解析
skip-name-resolve

# INNODB重點優化參數:緩存用戶表及索引數據,通常設置爲系統內存的50%,可是得根據實際預留
innodb_buffer_pool_size=2000M

# MyISAM重點優化參數:指定索引緩衝區的大小,它決定索引處理的速度,尤爲是索引讀的速度
key_buffer_size=32M

# 分配簡單索引掃描,範圍索引掃描,無索引全表掃描的錶鏈接緩存的大小
join-buffer-size=2M

# 在每一個connection(session)第一次須要這個buffer的時候,一次性分配設置的內存
sort-buffer-size=4M

# 讀查詢操做所能使用的緩衝區大小,該參數對應的分配內存也是每鏈接獨享
read_buffer_size=4M

# 針對按某種特定順序(如ORDER BY子句)輸出的查詢結果(默認256K)加速排序操做後的讀數據,提升讀分類行的速度
read_rnd_buffer_size=16M

# MyISAM表發生變化時從新排序所需的緩衝
myisam_sort_buffer_size=128M

# 關閉query-cache
query-cache-size=0
query_cache_type=0

# 臨時HEAP數據表的最大長度
tmp_table_size=256M

# 從新利用保存在緩存中線程的數量
thread_cache_size=64

# 開啓慢日誌查詢
log-slow-admin-statements
slow-query-log=on
slow-launch-time=2
slow-query-log-file=/opt/logs/mysql/mysql-slow.log

# 表描述符緩存大小,可減小文件打開/關閉次數
table-open-cache=512

# 設置最大鏈接(用戶)數
max-connections=5000

# 某一客戶端嘗試鏈接此MySQL服務器,可是失敗(如密碼錯誤等等)5000次,則MySQL會無條件強制阻止此客戶端鏈接
max_connect_errors=5000

# 不寫入硬盤而是寫入系統緩存
# 日誌仍然會每秒flush到硬盤,因此你通常不會丟失超過1-2秒的更新,只會在整個操做系統掛了時纔可能丟數據
innodb_flush_log_at_trx_commit=2

# 限制server接受的數據包大小
max_allowed_packet=300M

# 設置編碼格式
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8

# 忽略客戶端字符集
skip-character-set-client-handshake

# 跳過驗證
skip-grant-tables

 

【4】初始化數據庫:

/opt/services/mysql/bin/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/opt/services/mysql --datadir=/opt/services/mysql/data --user=mysql

 

【5】添加服務啓動腳本和環境變量:

# 建立啓動方式
cp /opt/services/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
sed -i 's/^basedir=$/&\/opt\/services\/mysql/g' /etc/init.d/mysqld
sed -i 's/^datadir=$/&\/opt\/services\/mysql\/data/g' /etc/init.d/mysqld

# 添加環境變量
echo "" >> /etc/profile
echo "# MySQL" >> /etc/profile
echo "export MYSQL_HOME=/opt/services/mysql" >> /etc/profile
echo 'export PATH=$PATH:${MYSQL_HOME}/bin' >> /etc/profile

# 生效環境變量
source /etc/profile

 

【6】啓動服務初始化用戶:

# 啓動服務
/etc/init.d/mysqld start

# 登陸 MySQL,以前配置文件有配置免認證
mysql

# 設置數據庫密碼,執行如下 SQL 語句
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
quit;

# 取消免密配置,重啓數據庫
sed -i 's%skip-grant-tables%#skip-grant-tables%g' /etc/my.cnf
/etc/init.d/mysqld restart

# 登陸數據庫新建用戶
mysql -uroot -p123456

# 執行如下 SQL 語句
alter user 'root'@'localhost' identified by '123456';
grant all on *.* to root@'%' identified by '123456' with grant option;
flush privileges;
quit;

 

【7】加入開機啓動:

# 加入開機啓動
echo '' >> /etc/rc.local
echo '# mysql startup' >> /etc/rc.local
echo '/etc/init.d/mysqld start &' >> /etc/rc.local

 

【8】至此 MySQL 5.7 安裝配置完成,密碼 123456,接下來安裝 PHP!

 

 

安裝 PHP

 

所需安裝包:

安裝包
php-7.0.30.tar.gz
libiconv-1.14.tar.gz

 

目錄說明: 

用途
目錄
安裝包路徑
/opt/packages/php
安裝路徑
/opt/services/php
日誌路徑
/opt/logs/php

 

【1】建立相應的用戶與目錄:

# 建立目錄
mkdir -p /opt/logs/php/tmp
mkdir -p /opt/packages/php
chown -R 777 /opt/logs/php/tmp
# 建立監聽用戶 useradd php -s /sbin/nologin

 

【2】安裝依賴: 

# 安裝 epel
yum install -y epel-release

# 安裝依賴
yum -y install libmcrypt-devel mcrypt mhash gd-devel ncurses-devel libxml2-devel bzip2-devel libcurl-devel curl-devel libjpeg-devel libpng-devel freetype-devel net-snmp-devel openssl-devel libmcrypt-devel

 

【3】將安裝包上傳到 /opt/packages/php ,而後編譯安裝:

# 解壓安裝包
cd /opt/packages/php

tar -zxf libiconv-1.14.tar.gz
tar -zxf php-7.0.30.tar.gz

# 編譯安裝 Libiconv
cd libiconv-1.14/srclib
sed -i -e '/gets is a security/d' ./stdio.in.h
cd ..

./configure --prefix=/usr/local/libiconv

make && make install

# 編譯安裝 PHP
cd ../php-7.0.30

./configure --prefix=/opt/services/php --with-config-file-path=/opt/services/php/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/libiconv --with-pcre-regex --with-zlib --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-native-ttf --with-mhash --enable-mbstring --with-mcrypt --enable-pcntl --enable-xml --disable-rpath --enable-shmop --enable-sockets --enable-zip --enable-bcmath --with-snmp --disable-ipv6 --with-gettext  --enable-fpm --with-fpm-user=php --with-fpm-group=php --with-openssl

make && make install

 

【4】配置 PHP:

# 複製配置文件
cd /opt/services/php/etc/
cp php-fpm.conf.default php-fpm.conf
cp /opt/packages/php/php-7.0.30/php.ini-production .
mv php.ini-production php.ini

# 修改 php.ini 配置
sed -i 's#;date.timezone =#date.timezone = PRC#g' php.ini 
sed -i 's#expose_php = On#expose_php = Off#g' php.ini 
sed -i 's#^;cgi.fix_pathinfo=1#cgi.fix_pathinfo=1#g' php.ini 
sed -i 's#disable_functions =#disable_functions =exec,system,eval,passthru,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,fsocket,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server#g' php.ini 
sed -i 's#max_execution_time = 30#max_execution_time = 300#g' php.ini 
sed -i 's#max_input_time = 60#max_input_time = 300#g' php.ini 
sed -i 's#post_max_size = 8M#post_max_size = 24M#g' php.ini 
sed -i 's#upload_max_filesize = 2M#upload_max_filesize = 4M#g' php.ini
sed -i 's#pdo_mysql.default_socket=#pdo_mysql.default_socket= /opt/logs/mysql/mysql.sock#g' php.ini 
sed -i 's#mysqli.default_socket =#mysqli.default_socket = /opt/logs/mysql/mysql.sock#g' php.ini 
sed -i 's#;session.save_path = "/tmp"#session.save_path = "/opt/logs/php/tmp"#g' php.ini

# 修改 www.conf 配置
cd php-fpm.d/
cp www.conf.default www.conf
sed -i 's#;rlimit_files = 1024#rlimit_files = 65535#g' www.conf
sed -i 's#;listen.owner = php#listen.owner = www#g' www.conf
sed -i 's#;listen.group = php#listen.group = www#g' www.conf
sed -i 's#;listen.mode = 0660#listen.mode = 0660#g' www.conf

 

【5】配置啓動腳本: 

cp /opt/packages/php/php-7.0.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

 

【6】啓動服務和開機自啓動:

# 啓動服務
/etc/init.d/php-fpm start

# 加入開機啓動
echo '' >> /etc/rc.local
echo '# php startup' >> /etc/rc.local
echo '/etc/init.d/php-fpm start &' >> /etc/rc.local

 

【7】至此,LNMP 環境都搭建完成,咱們能夠在 NGINX 中添加測試:

# 添加網站目錄
mkdir /opt/services/website

# 添加 PHP 測試頁面
echo '<?php
> phpinfo();
> ?>' > /opt/services/website/index.php

# 添加 Nginx 配置
vim /opt/services/nginx/conf/vhosts/php_test.conf

 

內容以下: 

server {
    listen 8080;
    server_name 192.168.200.101;
    access_log /opt/logs/nginx/test.log main;
    index index.php index.html index.html;
    root /opt/services/website;
   
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
   
    location ~ .*\.(php)?$ {
        expires -1s;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
    }
}

 

【8】啓動 Nginx 查看效果: 

/opt/services/nginx/sbin/nginx

 

瀏覽器訪問: 

 

 

 【9】此處,LNMP 環境檢測沒問題!

 

 

小結

 

LNMP 網上的安裝方式不少,也有一件安裝包,個人方法僅供你們參考,下面附帶一張安裝下來的目錄結構圖,能夠比較一下你的安裝和個人安裝的優缺點: 

 

 

下一篇

 

【2】按部就班學 Zabbix :安裝配置 Zabbix Server 服務端

相關文章
相關標籤/搜索