【Zabbixサーバー構築 #6】データベースサーバーとしてPostgreSQLとTImescaleDBをインストールする

概要

監視サーバーZabbixのデータの保存先として、データベースサーバーのPostgreSQLと、その拡張機能であるTimescaleDBをインストールします。

環境

ソフトウェア

インストール

PostgreSQLサーバー本体

PostgreSQLサーバーは、Debian標準のレポジトリにあるバージョン13を利用します。

# apt install postgresql-13

TimescaleDB

TImescaleDBのサイトにある手順をもとにインストールします。

# sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/debian/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list"
# wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring
# apt update
# apt install timescaledb-2-postgresql-13

PostgreSQLにTImescaleDBを組み込むための設定をします。

# timescaledb-tune -yes
Using postgresql.conf at this path:
/etc/postgresql/13/main/postgresql.conf

Writing backup to:
/tmp/timescaledb_tune.backup202111070825

shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ''
Recommended:
shared_preload_libraries = 'timescaledb'
success: shared_preload_libraries will be updated

Recommendations based on 3.66 GB of available memory and 2 CPUs for PostgreSQL 13

Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 959609kB
effective_cache_size = 2811MB
maintenance_work_mem = 479804kB
work_mem = 9596kB
success: memory settings will be updated

Parallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 13
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
success: parallelism settings will be updated

WAL settings recommendations
Current:
#wal_buffers = -1
min_wal_size = 80MB
Recommended:
wal_buffers = 16MB
min_wal_size = 512MB
success: WAL settings will be updated

Miscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.5
max_connections = 100
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_connections = 50
max_locks_per_transaction = 64
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 256
success: miscellaneous settings will be updated
Saving changes to: /etc/postgresql/13/main/postgresql.conf

有効にするためにPostgreSQLサーバーを再起動します。

# systemctl restart postgresql@13-main

以上で終了です。

【Zabbixサーバー構築 #5】VeeamBackup&Replication(無償版)によるDebianのイメージバックアップ

概要

VeeamBackup&Replication(以下、Veeam)にはLinuxサーバーにインストールすることで、イメージバックアップまでできる無償版が存在します。 イメージバックアップを取得することで、ディスクが破損した場合でも復旧出来たり、テスト環境を保存しておいて複数の環境にコピーすることが出来るようになります。

環境

ハードウェア

ソフトウェア

  • Debian 11 (bullseys)
  • Veeam Agent for Linux Free 5.0.1

インストール

1. Veeam(無償版の)ダウンロード

Veeam Software – データ保護戦略を加速する

左上の「製品」→「全ての無償ツール」から「Veeam Agent for Linux Free」をダウンロードします。 ダウンロードにはアカウントの作成が必要です。 f:id:infrablogger:20211106225536p:plain

2. ダウンロードしたファイルをサーバーにコピーする

RloginのSFTP転送機能でファイルをサーバーにコピーします。 f:id:infrablogger:20211106230232p:plain f:id:infrablogger:20211106230601p:plain

3. インストールする

# apt install /home/user/veeam-release-deb_1.0.8_amd64.deb 
# apt update
# apt install veeam

4. バックアップ用USBディスクを初期化してマウントする

ディスクを接続して接続先の識別子を確認する 下の例だと sda1 が外付けディスク

# lsblk -f
NAME         FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda                                                                                 
└─sda1       vfat   FAT32       28BF-2A2F                                           
mmcblk1                                                                             
├─mmcblk1p1  swap   1           efe99b5a-5ec9-4585-babd-621abe16f6ad                [SWAP]
├─mmcblk1p2  vfat   FAT32       0C93-B305                              89.2M     4% /boot/efi
└─mmcblk1p3  xfs                e3f180c1-1c0a-4de4-9980-6ef22651ba8f   51.6G     4% /
mmcblk1boot0                                                                        
mmcblk1boot1

バックアップディスクを初期化する

# mkfs.xfs -f /dev/sda1

自動マウントの設定をする マウントポイントは /data とする

# mkdir /data
# echo "UUID=$(lsblk -n -o UUID /dev/sda1) /data xfs defaults 0 0" >> /etc/fstab
# mount -a

5. Veeamのエラー回避のための設定

重要!バックアップエラーを回避するための設定

# cp /proc/kallsyms /boot/System.map-`uname -r`

6. Veeamの初期設定

# veeamconfig ui

ライセンスの許諾 f:id:infrablogger:20211106231103p:plain

リカバリメディアの作成 無線LAN経由でリカバリなどする場合には、ドライバを追加でインストールしたパッチ済みISOが必要です。 今回は、外付けUSBディスクへのバックアップを想定しISOイメージは標準のものを利用します。 f:id:infrablogger:20211106231143p:plain

ライセンスファイルの指定 有償版のライセンスを持っている場合はここで指定することが出来ます。 無料版を利用する場合は空欄のままで進めます。 f:id:infrablogger:20211106231426p:plain

7. バックアップ設定

f:id:infrablogger:20211106234514p:plain

f:id:infrablogger:20211106234539p:plain

f:id:infrablogger:20211106234606p:plain

f:id:infrablogger:20211106234635p:plain

f:id:infrablogger:20211106234731p:plain

f:id:infrablogger:20211106234752p:plain

8. バックアップの実行

f:id:infrablogger:20211106235820p:plain

【Zabbixサーバー構築#4】IPアドレスを固定する

概要

サーバーとして動作させる場合、IPアドレスが再起動のたびに変わると大変なので固定します。

環境

ハードウェア

ソフトウェア

  • Debian 11 (bullseys)
  • NetworkManager

設定

Network-Managerをインストールする

# apt -y install network-manager

IPアドレスをNetworkManagerで管理できるようにする

以下のコマンドで、該当行の先頭に # を入力してコメントアウトする

# nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# allow-hotplug enp0s3     ← コメントアウト
# iface enp0s3 inet dhcp     ← コメントアウト

編集が終わったら Ctrl + X で終了

再起動

# reboot

IPアドレスを確認してSSHで接続する

IPアドレスを変更する

# nmtui

f:id:infrablogger:20211106215457p:plain

f:id:infrablogger:20211106215521p:plain

アドレス、ゲートウェイDNSサーバーを環境に合わせて設定する f:id:infrablogger:20211106215750p:plain

再起動する

# reboot

【Zabbixサーバー構築#3】Debian にRloginでSSH接続する

概要

キーボード入力でも操作できますが、コピー&ペーストなどができないためSSHで接続できるようにします。

環境

ソフトウェア

# ip a

f:id:infrablogger:20211106213900p:plain

  1. SSHクライアント(Rlogin)を入手する kmiya-culti.github.io

  2. 接続設定する f:id:infrablogger:20211106213354p:plain

ホスト名(サーバーIPアドレス):調べたIPアドレス ログインユーザ名:インストール時に設定したユーザー名 パスワード:インストール時に設定したパスワード

f:id:infrablogger:20211106213627p:plain

【Zabbixサーバー構築#2】Debian 11 をインストールする

概要

前回入手したイメージを使ってDebianをインストールしていきます。

環境

ハードウェア

ソフトウェア

インストール

CDから起動する

f:id:infrablogger:20211106195943p:plain

Graphical Install を選択

f:id:infrablogger:20211106200157p:plain

Japanese 日本語を選択

f:id:infrablogger:20211106200321p:plain

日本を選択

f:id:infrablogger:20211106200358p:plain

キーボードの選択 → 日本語を選択

f:id:infrablogger:20211106200456p:plain

ホスト名の入力

f:id:infrablogger:20211106200607p:plain

ドメイン名を入力

f:id:infrablogger:20211106200646p:plain

管理者パスワードの設定

f:id:infrablogger:20211106201034p:plain

ユーザーのフルネーム設定

f:id:infrablogger:20211106201148p:plain

ユーザー名の設定

f:id:infrablogger:20211106201326p:plain

ユーザーパスワードの設定

f:id:infrablogger:20211106201412p:plain

ディスクのパーティション設定方法の選択

f:id:infrablogger:20211106202025p:plain

パーティション設定するディスクの設定

f:id:infrablogger:20211106202143p:plain

パーティションテーブルの作成

f:id:infrablogger:20211106202221p:plain

パーティションを設定する

スワップ領域は、メモリと同容量設定する。 それ以外を1つのパーティションに設定する。 ファイルシステムは、データベースに適したXFSを選択する。

f:id:infrablogger:20211106202726p:plain

パーティション構成を書き込む

f:id:infrablogger:20211106203302p:plain

別のインストールメディアを選択

今回は、インターネットからダウンロードするため「なし」を選択する。 f:id:infrablogger:20211106203522p:plain

ミラーサイト(国)の選択

f:id:infrablogger:20211106203558p:plain

ミラーサイトの選択

f:id:infrablogger:20211106203648p:plain

HTTPプロキシの設定

f:id:infrablogger:20211106203735p:plain

統計調査への参加

f:id:infrablogger:20211106203844p:plain

インストールするパッケージの選択

今回は、サーバー用途のためGUIはインストールしない

f:id:infrablogger:20211106203930p:plain

ブートローダーのインストール

f:id:infrablogger:20211106204149p:plain

ブートローダーをインストールするディスクの選択

f:id:infrablogger:20211106204234p:plain

インストールの完了

f:id:infrablogger:20211106204332p:plain

以上でインストール完了です。 お疲れさまでした。

【Zabbixサーバー構築#1】Debian 11 を入手する

概要

100台程度の機器を監視するためのZabbixサーバーを構築します。 本稿では、ベースとなるOSをインストールします。

OSの選定

今回は、Intel CPUを利用しますが、Raspberry PiなどCPUにARMを利用する組み込み系機器でも利用できるDebianを利用します。

環境

ハードウェア

www.links.co.jp

ソフトウェア

インストールイメージを入手する

Debianのインストールには、インストーラとして最低限の機能のみが含まれ、インターネットから必要なパッケージをダウンロードしながらインストールするnetinstイメージが推奨されます。但し、これには無線LANなどで必要なファームウェアが含まれていないため、Unofficial non-free images including firmware packagesを利用します。

  1. Debian サイトでDownloadを選択 f:id:infrablogger:20211106192108p:plain

  2. Unofficial non-free images including firmware packages を選択 f:id:infrablogger:20211106191418p:plain

  3. インストーライメージを選択 f:id:infrablogger:20211106191543p:plain

  4. 使用するCPUの選択 f:id:infrablogger:20211106191701p:plain

  5. CDイメージを選択 f:id:infrablogger:20211106191840p:plain

  6. 通常版のインストーラをダウンロード f:id:infrablogger:20211106191934p:plain

PostgreSQL14をZabbix用にパーティション構成で設定する

概要

監視サービスのZabbixに適したパーティション構成でPostgreSQLをインストールしていきます。

Zabbixは、直近の監視データを historyテーブルに保存し指定した期間を過ぎるとtrendsテーブルにデータを集約してコピーした後にhistoryテーブルのデータを削除します。しかし、監視対象が増えると削除処理が追い付かなくなってきます。パーティション構成にすると、不要になったパーティションDropすることでデータの削除処理が大幅に軽減されます。

環境

インストール

PostgreSQL 14

# apt install postgresql-common
# sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

# sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/debian/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list"
# wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring
# apt update
# apt install timescaledb-2-postgresql-14
# timescaledb-tune --quiet --yes

Zabbix

サイトの手順に従ってパッケージをインストールする

www.zabbix.com

パッケージはOSなどに合わせて選択します。

f:id:infrablogger:20211103160453p:plain
ダウンロードするパッケージの選択

  1. Install Zabbix repository
# wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian11_all.deb
# dpkg -i zabbix-release_5.4-1+debian11_all.deb
# apt update
  1. Install Zabbix server, frontend, agent
# apt install zabbix-server-pgsql zabbix-frontend-php php7.4-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

DBユーザーとDB作成

# su - postgres
$ createuser --pwprompt zabbix
$ createdb -O zabbix zabbix

アクセス権の設定

/etc/postgresql/14/main/postgresql.conf 内の以下の行のコメントを外す。

#listen_addresses = 'localhost'          # what IP address(es) to listen on;

listen_addresses = 'localhost'          # what IP address(es) to listen on;

にしてデータベースを再起動する。

# systemctl restart postgresql@14-main

Zabbix用のスキーマ(テーブルなど)を作成する

# zcat /usr/share/doc/zabbix-sql-scripts/postgresql/create.sql.gz | psql -h 127.0.0.1 -U zabbix zabbix
Password for user zabbix: 

timescaledbを有効にする

# psql -h 127.0.0.1 -U zabbix zabbix
Password for user zabbix: 

zabbix=> CREATE extension timescaledb;
WARNING:  
WELCOME TO
 _____ _                               _     ____________  
|_   _(_)                             | |    |  _  \ ___ \ 
  | |  _ _ __ ___   ___  ___  ___ __ _| | ___| | | | |_/ / 
  | | | |  _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \ 
  | | | | | | | | |  __/\__ \ (_| (_| | |  __/ |/ /| |_/ /
  |_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
               Running version 2.5.0
For more information on TimescaleDB, please visit the following links:

 1. Getting started: https://docs.timescale.com/timescaledb/latest/getting-started
 2. API reference documentation: https://docs.timescale.com/api/latest
 3. How TimescaleDB is designed: https://docs.timescale.com/timescaledb/latest/overview/core-concepts

Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescale.com/timescaledb/latest/how-to-guides/configuration/telemetry.

CREATE EXTENSION
zabbix=> quit

# cat /usr/share/doc/zabbix-sql-scripts/postgresql/timescaledb.sql | psql -h 127.0.0.1 -U zabbix zabbix
Password for user zabbix: 
NOTICE:  PostgreSQL version 14.0 (Debian 14.0-1.pgdg110+1) is valid
NOTICE:  TimescaleDB extension is detected
NOTICE:  TimescaleDB version 2.5.0 is valid
NOTICE:  TimescaleDB is configured successfully
DO

Zabbix server のDBパスワードの設定

/etc/zabbix/zabbix_server.conf を編集する

DBPassword=password

Zabbixのフロントエンドを表示するための設定

/etc/zabbix/nginx.conf を編集して、以下の項目のコメントを外す

listen 80;
server_name example.com;

/etc/php/7.4/fpm/pool.d/zabbix-php-fpm.conf を編集して、タイムゾーンを日本語にする

; php_value[date.timezone] = Europe/Riga
     ↓
 php_value[date.timezone] = Asia/Tokyo

Zabbix server と agent を再起動して、自動起動するよう設定する

# systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
# systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm

フロントエンドの設定

ブラウザで http://サーバーのアドレス> にアクセスする

f:id:infrablogger:20211103235656p:plain

f:id:infrablogger:20211103235740p:plain

f:id:infrablogger:20211103235909p:plain

f:id:infrablogger:20211103235958p:plain

f:id:infrablogger:20211104000057p:plain

f:id:infrablogger:20211104000121p:plain

f:id:infrablogger:20211104000145p:plain

デフォルトは Admin / zabbix f:id:infrablogger:20211104000216p:plain