กลุ่มชุมชนแลกเปลี่ยนความรู้แบ่งปั่น และช่วยเหลือ ต่อการใช้งาน OpenSource Zabbix เพราะการแบ่งปัน นั้นยิ่งใหญ่กว่า.

Installation of CentOS 8 + Zabbix 5.0 + Nginx 1 + php-fpm 7.4 + PostgreSQL 12 + TimescaleDB 2 (การติดตั้ง CentOS 8 + Zabbix 5.0 + Nginx 1 + php-fpm 7.4 + PostgreSQL 12 + TimescaleDB 2)

 Installation of CentOS 8 + Zabbix 5.0 + Nginx 1 + php-fpm 7.4 + PostgreSQL 12 + TimescaleDB 2

(การติดตั้ง CentOS 8 + Zabbix 5.0 + Nginx 1 + php-fpm 7.4 + PostgreSQL 12 + TimescaleDB 2)


PostgreSQL 12 Installation

Installing

# dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# dnf -qy module disable postgresql

# dnf update

# dnf install postgresql12-server

Configuring

# /usr/pgsql-12/bin/postgresql-12-setup initdb

# systemctl enable postgresql-12

# systemctl start postgresql-12


TimescaleDB 2 Installation

Setting up TimescalDB dnf repository

# vi /etc/yum.repos.d/timescale_timescaledb.repo

--Fill content in file named timescale_timescaledb.repo-- 

[timescale_timescaledb]

name=timescale_timescaledb

baseurl=https://packagecloud.io/timescale/timescaledb/el/8/x86_64

repo_gpgcheck=1

gpgcheck=0

enabled=1

gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey

sslverify=1

sslcacert=/etc/pki/tls/certs/ca-bundle.crt

metadata_expire=300

Install & Configuration

# dnf update

# dnf install timescaledb-postgresql-12

# timescaledb-tune -pg-config /usr/pgsql-12/bin/pg_config

--Answer "yes" to all-- 

# systemctl restart postgresql-12


PHP 7.4 Installation

Installing

# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

# dnf install epel-release

# dnf update

# dnf module enable php:remi-7.4

# dnf install php-fpm

# systemctl enable php-fpm

# systemctl start php-fpm


Nginx 1 Installation

Installing

# dnf install nginx

# systemctl enable nginx

# systemctl start nginx


Zabbix 5.0 Installation

Installing

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm

# dnf clean all

# dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-agent

Setting up database

# cd /tmp/

# sudo -u postgres createuser --pwprompt zabbix

# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbixdb

# zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbixdb

Setting up timescaledb

# echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbixdb

# zcat /usr/share/doc/zabbix-server-pgsql*/timescaledb.sql.gz | sudo -u zabbix psql zabbixdb

Remark:

Default History chunk = 1 day

Default Trend chunk = 30 day

Default Compress = 7 day

Setting up Zabbix for database

# vi /etc/zabbix/zabbix_server.conf

--Edit content in file--

DBHost=localhost

DBName=zabbixdb

DBUser=zabbix

DBPassword=xxxxxxxx

Configuring PHP-FPM for Zabbix

# vi /etc/php-fpm.d/zabbix.conf

--Edit content in file-- 

php_value[date.timezone] = Asia/Bangkok

Configuring Nginx for Zabbix (Open port TCP/81-HTTP for Zabbix webui - Not default TCP/80)

# vi /etc/nginx/conf.d/zabbix.conf

--Edit content in file--

listen 81 default_server;

Configuring PostgreSQL

# vi /var/lib/pgsql/12/data/pg_hba.conf

--Edit content in file--

host    all             all             127.0.0.1/32           md5

host    all             all             ::1/128                md5


Enable & Restart all related services

# systemctl enable zabbix-server zabbix-agent

# systemctl restart zabbix-server zabbix-agent nginx php-fpm postgresql-12


Continue setting up using Zabbix webui (Rememberer Using port 81)

http://IP_ADDR:81/


Reference:

[1] https://www.zabbix.com/download?zabbix=5.0&os_distribution=centos&os_version=8&db=postgresql&ws=nginx

[2]  https://idomaster.com/solutions/install-zabbix-5-0-timescaledb-postgresql-on-centos8

[3] https://www.postgresql.org

[4] https://www.timescale.com

[5] https://www.zabbix.com/documentation/5.0/manual/appendix/install/db_scripts

[6] https://www.zabbix.com/documentation/5.0/manual/appendix/install/timescaledb

Share:

ขั้นตอนการดำเนินการทำ Zabbix 5 เพื่อให้ส่งแจ้งเตือนผ่าน LINE Notify โดยใช้ Webhook (The how to procedure for Zabbix 5 sending alert via LINE Notify using Webhook)

 ขั้นตอนการดำเนินการทำ Zabbix 5 เพื่อให้ส่งแจ้งเตือนผ่าน LINE Notify โดยใช้ Webhook

(The how to procedure for Zabbix 5 sending alert via LINE Notify using Webhook)

ขั้นตอนที่ 1: ทำการสร้าง "Media types" ในรูปแบบ "Webhook" เพื่อรองรับการทำงานการแจ้งเตือนผ่าน LINE, โดยไปที่เมนู Adminstration -> Media types -> Create media type
(Step 1: Creating "Media types" with type "Webhook" for suppored customising send LINE alert. Goto  Adminstration -> Media types -> Create media type) 



ขั้นตอนที่ 2: ที่หน้าจอ "Media types" กำหนดรายละเอียดดังนี้
(Step 2: On menu named "Media types" specified parameters as following.)

Name: YOUR_MEDIA_TYPE_NAME - e.g.: LineWebhook
Type: Webhook
Script parameters:
  • URL ---> https://notify-api.line.me/api/notify
  • To ---> {ALERT.SENDTO}
  • Subject ---> {ALERT.SUBJECT}
  • Message ---> {ALERT.MESSAGE}
  • linetoken ---> {$LINENOTIFYTOKEN}
Script: FOLLOWING AFTER IMAGE


Script here:
====================
try {
   #Zabbix.Log(4, 'webhook script value='+value);
   var params = JSON.parse(value);
   var req = new CurlHttpRequest();
   var fields = {};
   var resp;
   
   req.AddHeader('Content-Type : application/x-www-form-urlencoded');
   req.AddHeader('Authorization: Bearer '+params.linetoken);

   resp = req.Post(params.URL, 'message='+encodeURIComponent(params.Subject));

   #Zabbix.Log(4, 'webhook response='+resp);

} catch (error) {
    #Zabbix.Log(4, 'webhook json : '+value);
    #Zabbix.Log(4, 'webhook error : '+error);
    resp = error;
}

return JSON.stringify(resp);
====================


ขั้นตอนที่ 3: กำหนดให้ "Message Templates" อย่างน้อยคือ "Problem" และ "Problem recovery", โดยไปที่แท็ป Message templates เลือก Add ที่ Message type อย่างน้อยคือ "Problem" และ "Problem recovery"
(Step 3: Configure the "Message Template" at least are "Problem" and "Problem recovery" , Goto Message templates tab and add Message type at least are "Problem" and "Problem recovery")



ขั้นตอนที่ 4: สามารถทดสอบ "Media Type" ที่สร้างขึ้น ว่าสามารถทำการส่ง Line Notify ได้หรือไม่ โดยสำหรับ linetoken สามารถนำ token ที่ได้จาก LINE มาใส่ได้เลย
(Step 4: To testing this "Media Type" for sending Line Notify, You can fill linetoken with token that get from LINE.)



ขั้นตอนที่ 5: สร้าง "Macro" แบบ "Global" ในรูปแบบ "SecureText" ชื่อ {$LINENOTIFYTOKEN} โดยใส่ค่า token ที่ได้จาก line มาใส่ โดยไปที่เมนู Administration -> General -> Macros
(Step 5: Create "Macro" on "Global" type with "SecureText" capability named {$LINENOTIFYTOKEN} and fill with token that get from LINE.)



ขั้นตอนที่ 6: กำหนดให้ "User" ที่เกี่ยวข้องใช้งาน "Media" ที่สร้างขึ้นตามขั้นตอนที่ 2-3, โดยไปที่เมนู Administration -> Users -> เลือกผู้ใช้งานที่ต้องการ เช่น Admin -> Media โดยกำหนด "Type" เป็นชื่อ Media Type ที่สร้างขึ้นตามขั้นตอนที่ 2-3
(Step 6: Configure the related "User" to using "Media" that created in step no. 2-3, Goto Administration -> Users -> Choose related User such as Admin -> Media the set to "Type")



ขั้นตอนที่ 7: กำหนด "Action" ที่เกี่ยวข้องใช้งาน "Media" ที่สร้างขึ้นตามขั้นตอนที่ 2, โดยไปที่เมนู Configuration -> Actions -> เลือกชื่อ Action ที่ต้องการ หรือสร้าง Action ใหม่ -> จากนั้นกำหนดรายละเอียดดังนี้
(Step 7: Configure the related "Action" to using "Media" that created in step no. 2, Goto Configuration -> Actions -> Choose related Action or Create new Action ->  Then specified detail as following.)

เมนู "Action" (Action menu)

Name: YOUR_ACTION_NAME - e.g.: actiontriggerhigh
Condition: YOUR_ACTION_WILL_BE_WORKING_CONDITION - e.g.: Trigger severity equals High.
Enables: Seleted



ขั้นตอนที่ 8: กำหนด แท็ป "Operations" (Operations tab configuration)



(A) ส่วนการทำงาน "Operations" ทำการ Add ผู้ใช้งานที่ได้ทำการกำหนดไว้ในขั้นตอนที่ 6 และเลือก "Send only to" ตามที่ได้สร้างขึ้นในขั้นตอนที่ 2-3
(For "Operations" section, Add the user that configured in step no. 6 and select "Send only to" that created on step no. 2-3)

(B) เช่นเดียวกันสำหรับ (A) ในส่วนการทำงาน "Recovery operations" ทำการ Add ผู้ใช้งานที่ได้ทำการกำหนดไว้ในขั้นตอนที่ 6 และเลือก "Send only to" ตามที่ได้สร้างขึ้นในขั้นตอนที่ 2-3
(As same as (A), For "Recovery operations" section, Add the user that configured in step no. 6 and select "Send only to" that created on step no. 2-3)



จากนั้น: สามารถสร้าง Trigger และทดสอบการทำงานเพื่อให้มีการส่ง Alert ผ่าน Line Notify ได้ต่อไป
(After that: Could create the Trigger and testing the scenario for sending alert via Line Notify)


Share:

Zabbix + LINE Notify alert with Graph image - Zabbix ส่งแจ้งเตือน LINE Notify ที่มีภาพกราฟ

ขั้นตอนการดำเนินการทำ Zabbix เพื่อให้ส่งแจ้งเตือนผ่าน LINE Notify ที่มีรูปภาพ Graph
(The how to procedure for Zabbix sending alert via LINE Notify with Graph image)

ขั้นตอนที่ 1: ทำการสร้าง "Media types" ในรูปแบบ "Script" เพื่อรองรับการทำงานการเขียนโปรแกรมส่งการแจ้งเตือนผ่าน LINE, โดยไปที่เมนู Adminstration -> Media types -> Create media type
(Step 1: Creating "Media types" with type "Script" for suppored customising send LINE alert. Goto  Adminstration -> Media types -> Create media type) 



ขั้นตอนที่ 2: ที่หน้าจอ "Media types" กำหนดรายละเอียดดังนี้
(Step 2: On menu named "Media types" specified parameters as following.)

Name: YOUR_MEDIA_TYPE_NAME - e.g.: LineGraph
Type: Script
Script name: YOUR_SHELL_SCRIPT_NAME - e.g.: linegraph
Script parameters:

  • {ALERT.SENDTO}     ---> Remember: This is $1 in your shell script
  • {ALERT.SUBJECT}    ---> Remember: This is $2 in your shell script
  • {ALERT.MESSAGE}  ---> Remember: This is $3 in your shell script
Enables: Seleted



ขั้นตอนที่ 3: กำหนดให้ "User" ที่เกี่ยวข้องใช้งาน "Media" ที่สร้างขึ้นตามขั้นตอนที่ 2, โดยไปที่เมนู Administration -> Users -> เลือกผู้ใช้งานที่ต้องการ เช่น Admin -> Media โดยกำหนด "Type" เป็นชื่อ Media Type ที่สร้างขึ้นตามขั้นตอนที่ 2
(Step 3: Configure the related "User" to using "Media" that created in step no. 2, Goto Administration -> Users -> Choose related User such as Admin -> Media the set to "Type")



ขั้นตอนที่ 4: กำหนด "Action" ที่เกี่ยวข้องใช้งาน "Media" ที่สร้างขึ้นตามขั้นตอนที่ 2, โดยไปที่เมนู Configuration -> Actions -> เลือกชื่อ Action ที่ต้องการ หรือสร้าง Action ใหม่ -> จากนั้นกำหนดรายละเอียดดังนี้
(Step 4: Configure the related "Action" to using "Media" that created in step no. 2, Goto Configuration -> Actions -> Choose related Action or Create new Action ->  Then specified detail as following.)

เมนู "Action" (Action menu)

Name: YOUR_ACTION_NAME - e.g.: SendEmailLine
Condition: YOUR_ACTION_WILL_BE_WORKING_CONDITION - e.g.: Trigger severity.
Enables: Seleted


(A) เมนู "Operations/Recovery operations/Update operations" (Operations/Recovery operations/Update operations menu)

Default message: Including wording "Graph: [{ITEM.ID1}]"
Operations: รายละเอียดตามเมนูย่อย "Operation details" (Please following Operation details sub-menu)


(B) เมนูย่อย "Operation details" -> จะปรากฎหลังจากที่คลิก "New" or "Edit"
(Operation details sub-menu -> After clicking "New" or "Edit") 

Send to Users: YOUR_ALERT_RELATED_USERS - e.g.: Admin
Send only to: YOUR_MEDIA - e.g.: LineGraph
Default message: Seleted


**กำหนดรายละเอียดตามขั้นตอน (A) และ (B) สำหรับเมนู "Recovery operations/Update operations" ให้ครบถ้วน
(Completed configure setting (A) and (B) on Recovery operations/Update operations menu)**


ขั้นตอนที่ 5: สร้างไฟล์ Shell script ในไดเร็คทอรี /usr/lib/zabbix/alertscripts (ตัวอย่าง CentOS) บนเครื่อง Zabbix สำหรับทำงานในการส่ง ข้อมูลรายละเอียด และรูปภาพกราฟ การแจ้งเตือนผ่านช่องทาง LINE Notify โดยชื่อไฟล์จะต้องตรงกับที่กำหนดไว้ในขั้นตอนที่ 2 - ชื่อพารามิเตอร์ "Script name" เช่น linegraph
(Step 5: Create Shell script file in /usr/lib/zabbix/alertscripts directory (Example of CentOS) on Zabbix server machine for sending information and graph picture via LINE Notify. This script file name must be the same on Step no.2 - Parameter named "Script name" such as linegraph)

ตัวอย่างไฟล์ shell script (Example of shell script file)
#!/bin/bash
ZBX_URL="http://127.0.0.1/zabbix"
USERNAME="YOUR_ZABBIX_WEB_USER"              # e.g.: Admin
PASSWORD="YOUR_ZABBIX_WEB_PASSWORD"   # e.g.: zabbix
PERIOD=10800
ZABBIXVERSION34="1"
GRAPHID=$3
GRAPHID=$(echo $GRAPHID | grep -o -E "(Graph: \[[0-9]{7}\])|(Graph: \[[0-9]{6}\])|(Graph: \[[0-9]{5}\])|(Graph: \[[0-9]{4}\])|(Graph: \[[0-9]{3}\])")
GRAPHID=$(echo $GRAPHID | grep -o -E "([0-9]{7})|([0-9]{6})|([0-9]{5})|([0-9]{4})|([0-9]{3})")
case $GRAPHID in
''|*[!0-9]*) INC_GRAPH=0 ;;
*) INC_GRAPH=1 ;;
esac
WIDTH=800
CURL="/usr/bin/curl"
#NEW_UUID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 4 | head -n 1)
NEW_UUID=$RANDOM
COOKIE="/tmp/zapi_cookie-$(date "+%Y.%m.%d-%H.%M.%S")-${NEW_UUID}"
PNG_PATH="/tmp/zapi_graph-$(date "+%Y.%m.%d-%H.%M.%S")-${NEW_UUID}.png"

if [ $(($INC_GRAPH)) -eq '1' ]; then
${CURL} -k -s -c ${COOKIE} -b ${COOKIE} -d "name=${USERNAME}&password=${PASSWORD}&autologin=1&enter=Sign%20in" ${ZBX_URL}"/index.php" > /dev/null
if [ "${GRAPHID}" == "000001" ]; then
GRAPHID="00002";
${CURL} -k -s -c ${COOKIE} -b ${COOKIE} -d "graphid=${GRAPHID}&period=${PERIOD}&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";
elif [ "${GRAPHID}" == "000002" ]; then
GRAPHID="00003";
${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "graphid=${GRAPHID}&period=${PERIOD}&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";
elif [ "${GRAPHID}" == "000003" ]; then
GRAPHID="00004";
${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "graphid=${GRAPHID}&period=${PERIOD}&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";
else
if [ "${ZABBIXVERSION34}" == "1" ]; then
${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "itemids=${GRAPHID}&period=${PERIOD}&width=${WIDTH}&profileIdx=web.item.graph" ${ZBX_URL}"/chart.php" -o "${PNG_PATH}";
else
${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "itemids=${GRAPHID}&period=${PERIOD}&width=${WIDTH}" ${ZBX_URL}"/chart.php" -o "${PNG_PATH}";
fi
fi
${CURL} -X POST -H "Authorization: Bearer YOUR_LINE_NOTIFY_TOKEN" -F "message=$2" -F "imageFile=@${PNG_PATH}" https://notify-api.line.me/api/notify
else
${CURL} -X POST -H "Authorization: Bearer YOUR_LINE_NOTIFY_TOKEN" -F "message=$2" https://notify-api.line.me/api/notify
fi
rm -f ${COOKIE}
rm -f ${PNG_PATH}


ขั้นตอนที่ 6: กำหนดให้ไฟล์ shell script ดังกล่าว สามารถ execute ได้ โดยคำสั่งดังต่อไปนี้บนระบบปฏิบัติการบนเครื่อง Zabbix
(Step 6: Set shell script file permission to allow executable on Zabbix server operating system - OS as following command)
# chmod +x /usr/lib/zabbix/alertscripts/YOUR_SCRIPT_FILE

ตัวอย่าง (Example)
# chmod +x /usr/lib/zabbix/alertscripts/linegraph


Reference:
https://github.com/diegosmaia/zabbix-telegram

Share:
 
Zabbix in Thailand
Facebook Group · 701 members
Join Group
กลุ่มนี้จัดตั้งขึ้นเพื่อแลกเปลี่ยนความรู้ของ zabbix ใครมีคู่มือ เทคนิค หรือ ปัญหา มาร่วมมือกันแก้ไขกันสำหรับชาวไทย -----------------------------------...
 

Popular

ค้นหาบล็อกนี้

Labels

Comments

Labels

Recent Posts