簡易的なメールスクリプト

Windows環境において、自作バッチファイルやアプリなどのエラー判定時にメール連携させたい場合があります。エラー判定時に呼び出しすることでメール送信できる簡易的なスクリプトのテンプレートを公開します。また、メールが成功しない場合の切り分けツールとしても有効です。

以下内容を拡張子vbsで保存します。ここではmailsend.vbsとして保存します。

'Option Explicit
Set oMsg = CreateObject("CDO.Message")

'送信元アドレス
oMsg.From = "from@test.domain"

'送信先アドレス(To)
oMsg.To = "to@test.domain"

'送信先アドレス(Cc)
oMsg.Cc = "cc@test.domain"

'件名
oMsg.Subject = "test"

'本文(& vbCrLf _は改行)
oMsg.TextBody = "test1" & vbCrLf _
& "test2" & vbCrLf _

'送信方法(固定)
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'SMTPサーバー
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.domain"

'SMTPポート
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587

oMsg.Configuration.Fields.Update
oMsg.Send

保存したスクリプトをコマンドプロンプト上で呼び出します。

cscript mailsend.vbs

以上

vsftpdログの日本語文字化けを解消する

vsftpdは、デフォルト状態のログでは日本語含むファイル名が文字化けします。これを解消するためには、ソースを編集したオリジナルパッチを適用する必要があります。

環境
OS:CentOS7.6
vsftpdバージョン:3.0.2

  1. vsftpdのソースをダウンロードします。
    # wget http://vault.centos.org/7.6.1810/os/Source/SPackages/vsftpd-3.0.2-25.el7.src.rpm
  2. rpm作成環境を準備します。
    # yum -y install rpm-build
    # useradd -s /sbin/nologin mockbuild
  3. vsftpfをrpmでインストールします。
    # rpm -ivh vsftpd-3.0.2-25.el7.src.rpm
  4. vsftpdのソースを展開し、ソースをバックアップします。
    # tar xvfz rpmbuild/SOURCES/vsftpd-3.0.2.tar.gz
    # mkdir backup
    # cp -p vsftpd-3.0.2/logging.c vsftpd-3.0.2/logging.c.org
    # cp -p rpmbuild/SOURCES/vsftpd-3.0.2.tar.gz backup/
  5. ソースのロギングライブラリを編集し、オリジナルパッチを作成します。

    # vi vsftpd-3.0.2/logging.c
      str_replace_unprintable(p_str, '?');
      →/*str_replace_unprintable(p_str, '?');*/
    # echo "diff -up vsftpd-3.0.2/logging.c.org vsftpd-3.0.2/logging.c" > vsftpd-3.0.2-logging_charset.patch
    # diff -up vsftpd-3.0.2/logging.c.org vsftpd-3.0.2/logging.c >> vsftpd-3.0.2-logging_charset.patch
    # mv vsftpd-3.0.2-logging_charset.patch /root/rpmbuild/SOURCES/
    # cp -p rpmbuild/SPECS/vsftpd.spec backup/
    # vi rpmbuild/SPECS/vsftpd.spec
      Release: 25%.{?dist} → Release: 25.tcs%{?dist}
      # Patch51: vsftpd-3.0.2-logging_charset.patch
      # %patch51 -p1 -b .org_version
    # tar cvfz vsftpd-3.0.2.tar.gz vsftpd-3.0.2/
    # cp -p vsftpd-3.0.2.tar.gz rpmbuild/SOURCES/
  6. ソースをコンパイルする環境の準備

    # yum -y install pam-devel
    # yum -y install libcap-devel
    # yum -y install openssl-devel
    # yum -y install tcp_wrappers-devel
    # yum -y install gcc
    # rpmbuild -ba rpmbuild/SPECS/vsftpd.spec
    
  7. オリジナルパッチの適用

    # rpm -ivh rpmbuild/RPMS/x86_64/vsftpd-3.0.2-25.org.el7.x86_64.rpm

    以上

ZabbixAgentのソースコンパイル手順

LinuxOSにパッケージをインストールする際に、ハードウェア都合によるアーキテクチャの仕様により、パッケージがリポジトリに公開されておらず、インストールできないケースがあります。この場合、ソースをコンパイルしてインストールすることで解決できることがありますので、実際にZabbixAgentで実施した手順を公開します。

環境
H/W:OpenBlocks A6
アーキテクチャ:armel
OS:Debian 7.11(Wheezy)
要件:armelアーキテクチャのOSにZabbixAgentをインストールする

# groupadd zabbix
# useradd -g zabbix zabbix
# apt-get install gcc
# wget https://cdn.zabbix.com/zabbix/sources/stable/3.0/zabbix-3.0.31.tar.gz
(実際に必要なバージョンを指定してください)
# tar -zxvf zabbix-3.0.31.tar.gz
# cd zabbix-3.0.31
# ./configure --enable-agent
# make install

※confはZabbixデフォルトの/etc/zabbix/配下に配置したいところですが、ソースのデフォルトが/usr/local/etc/になっていたため、ソースのデフォルトを優先しました。

# cp /usr/local/etc/zabbix_agentd.conf{,.org}
# vi /usr/local/etc/zabbix_agentd.conf
  PidFile=/var/run/zabbix/zabbix_agentd.pid
  LogFile=/var/log/zabbix/zabbix_agentd.log
  Server=xxx.xxx.xxx.xxx
# mkdir /var/log/zabbix
# chown -R zabbix:zabbix /var/log/zabbix
# cp -p /etc/init.d/zabbix-agent{,.org}
# cp zabbix-3.0.31/misc/init.d/debian/zabbix-agent /etc/init.d/
# vi /etc/init.d/zabbix-agent
  #PID=/tmp/$NAME.pid
  PID=/var/run/zabbix/$NAME.pid
# /etc/init.d/zabbix-agent start

以上

DNSサーバ運用編

DNSサーバ正系副系の2環境のサービスイン後、新たにレコード追加し、正系副系の両方に同期させる手順です。

要件:efg.test.domainを192.168.1.201に名前解決させる

  1. 正系DNSサーバーにログインし、正引き/逆引きゾーンファイルをバックアップします

    # cp -p /etc/bind/test.domain.lan{,.yyyymmdd}
    # cp -p /etc/bind/1.168.192.db{,.yyyymmdd}
  2. 正引きゾーンファイルを修正します

    # vi /etc/bind/test.domain.lan
    シリアルを更新する yyyymmdd01 ; serial
    レコードを追記する efg IN A 192.168.1.201
    
  3. 逆引きゾーンファイルを修正します

    # vi /etc/bind/1.168.192.db
    シリアルを更新する yyyymmdd02 ; serial
    レコードを追記する 201 IN PTR test.domain.
  4. Bind9を再起動します
    # rndc reload
  5. 副系サーバにログインし、ゾーン転送されていることを確認します

    # cat /etc/bind/slaves/test.domain.lan
    # cat /etc/bind/slaves/1.168.192.db

以上

DNSサーバ 副系サーバ構築編

「DNSサーバ 正系サーバ構築編」の冗長化として、副系サーバの構築手順を公開します。正系サーバがダウンしても副系サーバで稼働します。構築手順は正系サーバとほとんど同じですが、一部コンフィグにおいて正系サーバを指定する箇所があります。

環境は以下のとおりです。

HW:OpenBlocks A6
OS:Debian7.11(Wheezy) ※OpenBlocks A6標準搭載
DNSサーバ:Bind9
正系サーバIPアドレス:192.168.1.100/24
副系サーバIPアドレス:192.168.1.101/24
名前解決要件:abc.test.domainを192.168.1.200として名前解決する

DNSサーバ類のインストール

# aptitude -y install bind9 bind9utils dnsutils

Bindのコンフィグ作成

# cp -p /etc/bind/named.conf{,.org}
# vi /etc/bind/named.conf
  #include "/etc/bind/named.conf.default-zones";
  include "/etc/bind/named.conf.internal-zones";

# vi /etc/bind/named.conf.internal-zones
  # 正引きゾーン定義
  zone "test.domain" {
  type slave;
  masters { 192.168.1.100; };
  file "/etc/bind/slaves/test.domain.lan";
  };

  # 逆引きゾーン定義
  zone "1.168.192.in-addr.arpa" {
  type slave;
  masters { 192.168.1.100; };
  file "/etc/bind/slaves/1.168.192.db";
  };

# vi /etc/bind/named.conf.options
  allow-query { localhost; 192.168.1.0/24; };
  allow-transfer { localhost; 192.168.1.0/24; };
  allow-recursion { localhost; 192.168.1.0/24; };
  # listen-on-v6 { any; };

# vi /etc/default/bind9
  OPTIONS="-u bind -4"

# mkdir /etc/bind/slaves
# chown bind. /etc/bind/slaves

Bindの再起動

# /etc/init.d/bind9 restart
または
# rndc reload

正系サーバのbind9を再起動させると、定義ファイル(lanファイル、dbファイル)がslaveディレクトリに同期されます。

以上

DNSサーバ 正系サーバ構築編

LAN環境向けのDNSサーバ構築手順です。Debian前提としておりますが、他のLinux系OSでも類似した手順での構築になると思います。今更ではありますが、まだまだ自社内で構築する機会はゼロではないので記事として公開します。

環境は以下のとおりです。

HW:OpenBlocks A6
OS:Debian7.11(Wheezy) ※OpenBlocks A6標準搭載
DNSサーバ:Bind9
サーバーIPアドレス:192.168.1.100/24
名前解決要件:abc.test.domainを192.168.1.200として名前解決する

DNSサーバ類のインストール

# aptitude -y install bind9 bind9utils dnsutils

Bindのコンフィグ設定

# cp -p /etc/bind/named.conf{,.org}
# vi /etc/bind/named.conf
  include "/etc/bind/named.conf.default-zones";
  include "/etc/bind/named.conf.internal-zones";
# vi /etc/bind/named.conf.internal-zones
  view "internal" {
  # 対象範囲を定義する
  match-clients {
  localhost;
  192.168.1.0/24;
  };

  # 正引きゾーンを定義する
  zone "test.domein" {
  type master;
  file "/etc/bind/test.domain.lan";
  allow-update { none; };
  };

  # 逆引きゾーンを定義する(逆のオクテット名で作成する)
  zone "1.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/1.168.192.db";
  allow-update { none; };
  };

  include "/etc/bind/named.conf.default-zones";
  empty-zones-enable no;
  };

# vi /etc/bind/named.conf.options
  allow-query { localhost; 192.168.1.0/24; };
  allow-transfer { localhost; 192.168.1.0/24; };
  allow-recursion { localhost; 192.168.1.0/24; };
  # listen-on-v6 { any; };

# vi /etc/resolv.conf
  nameserver 192.168.1.100

# vi /etc/bind/test.domain.lan
  $TTL 86400
  @ IN SOA ns.test.domain. root.test.domain. (
  yyyymmdd01 ;Serial
  3600 ;Refresh
  1800 ;Retry
  604800 ;Expire
  86400 ;Minimum TTL
  )
  IN NS ns.test.domain.
  IN A 192.168.1.100
  ns IN A 192.168.1.100
  abc IN A 192.168.1.200

# vi /etc/bind/1.168.192.db
  $TTL 86400
  @ IN SOA ns.test.domain. root.test.domain. (
  yyyymmdd01 ;Serial
  3600 ;Refresh
  1800 ;Retry
  604800 ;Expire
  86400 ;Minimum TTL
  )

  IN NS ns.test.domain.
  IN PTR test.domain.
  IN A 255.255.255.0
  100 IN PTR ns.test.domain.
  200 IN PTR abc.test.domain.

# vi /etc/default/bind9
  #OPTIONS="-u bind"
  OPTIONS="-u bind -4"

Bindを再起動する

# /etc/init.d/bind9 restart

※インターネット公開向け名前解決は別途external-zonesの構築が必要です。

以上

RMAN⑤ リカバリ・アドバイザ

DBが起動しなくなった時に、Oracle自身にリカバリ方法のアドバイス&実行させる方法となります。全損などの障害には対応できませんが、調査の一環としても利用できるかと思います。

※12c R2 時点では、RAC環境ではリカバリアドバイザは利用できません。
RMAN-05533: Command LIST FAILURE is not supported on RAC database

主な流れとしては、以下となります。
・障害発覚
・RMAN起動
・list failure コマンドでOracleが認識している障害を表示
・advise failure コマンドで修復方法を表示。(手動と自動が表示される)
・自動修復可能な場合は、repair failure コマンドで修復。自動修復出来ない場合は、手動で修復

簡単な例:

1.rmanでバックアップしておく

backup database plus archivelog delete all input;

2.障害準備

DBを停止し、データファイル(USERS01.DBF)を削除

3.DBを起動し、障害を認識させる

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 2533359616 bytes
Fixed Size 8750016 bytes
Variable Size 687868992 bytes
Database Buffers 1828716544 bytes
Redo Buffers 8024064 bytes
データベースがマウントされました。
ORA-01157: データファイル4を識別/ロックできません –
DBWRトレース・ファイルを参照してください
ORA-01110: データファイル4: ‘C:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF’

4.rman 起動

5.障害一覧表示(list failure)
RMAN> list failure;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
データベース・ロール: PRIMARY

データベース障害のリスト
=========================

障害ID 優先度ステータス 検出時間 サマリー
—— ——– ——— ——– ——-
374 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルの1つ以上でメディア・リカバリが必要です
202 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルが1つ以上見つかりません

6. 修復方法を表示(advise failure)

RMAN> advise failure;

データベース・ロール: PRIMARY

データベース障害のリスト
=========================

障害ID 優先度ステータス 検出時間 サマリー
—— ——– ——— ——– ——-
374 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルの1つ以上でメディア・リカバリが必要です
202 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルが1つ以上見つかりません

自動修復オプションを分析中です。これには少し時間がかかる場合があります
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK
自動修復オプションの分析が完了しました

必須の手動アクション
========================
使用可能な手動アクションがありません

オプションの手動アクション
=======================
1. 適切でないバージョンのデータファイルC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFをリストアした場合、適切なバージョンに置き換えます
2. 意図せずにファイルC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFの名前の変更または移動が行われていた場合リストアします

自動修復オプション
========================
オプション 修復 説明
—— ——————
1 データファイル4をリストアおよびリカバリします
計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: C:\APP\ORACLE\diag\rdbms\orcl\orcl\hm\reco_3471312696.hm

7. 自動修復実行(repair failure)

RMAN> repair failure;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: C:\APP\ORACLE\diag\rdbms\orcl\orcl\hm\reco_3471312696.hm

修復スクリプトの内容:
# restore and recover datafile
restore ( datafile 4 );
recover datafile 4;
sql ‘alter database datafile 4 online’;

この修復を実行しますか(YESまたはNOを入力してください)。 yes
修復スクリプトを実行しています

restoreを18-06-26で開始しています
チャネルORA_DISK_1の使用

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00004をC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFにリストアしています
チャネルORA_DISK_1: バックアップ・ピースC:\APP\ORACLE\ORADATA\ORCL\BACK\ORCL_3KT6DP3E_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=C:\APP\ORACLE\ORADATA\ORCL\BACK\ORCL_3KT6DP3E_1_1 タグ=TAG20180626T124118
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
restoreを18-06-26で終了しました

recoverを18-06-26で開始しています
チャネルORA_DISK_1の使用

メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:00

recoverを18-06-26で終了しました

SQL文: alter database datafile 4 online
障害の修復が完了しました

データベースをオープンしますか(YESまたはNOを入力してください)。 yes
データベースがオープンしました。

以上となります。

【Windows】Windows Server バックアップの特定のシャドウコピーを消したい

背景

Windows 2008 から標準搭載されている「Windows Server バックアップ」ですが、コマンドラインでも動かせて、昔の「NT バックアップ」よりはるかに使い勝手が良いです。

ただ、履歴管理はできなく、ネットワーク越しに取得すると 1 世代しかとれないわ(標準では)、履歴管理はできないわと、ファイルサーバーのバックアップにはあまり向かないようです。

が、標準ですので使っている方も多々いらっしゃいます。

専用ボリュームに取得すれば、古いシャドウコピーも勝手に消されるので、これはこれで便利。のはずなのですが、まれに古いシャドウコピーが削除されずに「保存対象がいっぱいです」みたいな感じでバックアップが永遠に取得できなくなることがあります。

経験上、OS のバージョンが上がっても解消されていないので、ここでは古いシャドウコピーを削除する方法をまとめておきます。

設定内容(画面ショットは Windows 2008 R2 ですが、2012/2016 でも大丈夫です)

1.最初にシャドウコピーの履歴を確認します

コマンドプロンプトから、以下のコマンドを実行します

・vssadmin list shadows /for=<BackupTarget>

<BackupTarget>:Windows Server バックアップで保存先にしているボリューム名です。
Z: とかです

※上記の場合は履歴が一つしかありませんが、状況によっては複数あることもあります。その場合は、結果を以下のようにリダイレクトすると以降の作業時に楽です。

・vssadmin list shadows /for=<BackupTarget> > C:\user\administrator\desktop\vsslist.txt

2.消したいシャドウコピーの「シャドウコピーID」を確認します

項番1 で指定したボリュームに存在するシャドウコピーの一覧で、削除対象のシャドウコピーの「シャドウコピーID」を確認します

シャドウ コピー ID: {be9243d9-42f7-41d8-aa22-7b18e71a0062}

 3.diskshadow ユーティリティを起動します

コマンドプロンプトを開き、以下のコマンドを実行します

・ Diskshadow

4.シャドウコピーを削除します

項番2 で確認した「シャドウコピーID」を削除します。

DISKSHADOW> の後に、以下のコマンドを入力します。

・DELETE SHADOWS ID <削除したいシャドウコピーID> <ターゲットボリューム名>

項番1 を例にすると、以下のようになります。

・DELETE SHADOWS ID {be9243d9-42f7-41d8-aa22-7b18e71a0062} G:

5.余談

項番4 でシャドウコピーを消す際に、「一番古いのを消したい」とか「ぜんぶ消してしまいたい」とかの場合は、そういうオプションも用意されてます。

例えば、「一番古いシャドウコピーを消したい」のでしたら、以下のコマンドで OK です。一番古い[10 世代分]を消したければ、このコマンドを 10 回繰り返すことで実現できます。

・DELETE SHADOWS OLDEST G:

DELETE SHADOWS { ALL | VOLUME <ボリューム> | OLDEST <ボリューム> | SET <セット I
D> | ID <シャドウ ID> | EXPOSED <ドライブ文字、マウント ポイント、または共有> }

シャドウ コピー (永続と非永続の両方) を削除します。

ALL すべてのシャドウ コピー。
 VOLUME <ボリューム> 指定したボリュームのすべてのシャドウ
 コピーを削除します。
 OLDEST <ボリューム> 指定したボリュームの最も古いシャドウ
 コピーを削除します。
 SET <セット ID> <セット ID> パラメーターで指定した
 シャドウ コピー セット内のシャドウ コピーを削除します。
 ID <シャドウ ID> <シャドウ ID> パラメーターで指定した
 シャドウ コピーを削除します。
 EXPOSED <露出名> 指定したドライブ文字、マウント ポイント、
 または共有に露出しているシャドウ コピーを削除します。

例: DELETE SHADOWS ALL
 DELETE SHADOWS EXPOSED p:
 DELETE SHADOWS EXPOSED 共有名

【Zabbix】Windows のプロセス監視で「コマンドライン」まで指定したい

背景

Zabbix のアイテムとしてプロセス数を取得する「proc.num[xxxx]」があります。

こちらは純粋に「上がっているプロセス数」を返してくれます。

Zabbix のマニュアルによると、オプションがいろいろあるのですが、Windows だと制限がありまして、コマンドラインを指定して値を取得することが出来ないんです。

URL↓

https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/zabbix_agent

でも、同じプロセス名(例えば java.exe)でも、コマンドラインまで確認して監視したい、なんて要望はあります。

こちらの設定、非常に簡単で設定できるので、こちらに記載します。

設定内容(画面ショットは 2.0 ですが、3.0 系でも大丈夫です)

1.最初にアイテムを作成します

対象のホストにて、[アイテム]を選択し、右上にある「アイテムの作成」ボタンを押します。

以下の画面のように作って頂ければと。

名前:Process_java.exe-1(任意です)
タイプ:Zabbixエージェント
キー:java1_procnumcheck(任意です。が、ホスト内でユニークになるように設定する必要があります)

2.ホスト側の[zabbix_agent.conf]を修正します

Zabbix Agent をインストールしたフォルダにある zabbix_agent.conf をエディター(Windows 標準なら、ワードパッドが良いです)で開きます。

セクション[UserParameter]部分に、以下のように追記します。

・UserParameter=java1_procnumcheck,wmic process where “name = \”java.exe\”” get commandline | find /v “CommandLine” | find /c “特定する文字列”

### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# Note that shell command must not return empty string or EOL only.
# Example: UserParameter=system.test,echo 1
UserParameter=java1_procnumcheck,wmic process where "name = \"java.exe\"" get commandline | find /v "CommandLine" | find /c "特定する文字列"

何を記載しているかと言うと、文法に則ってます。

文法:UserParameter=<key>,<command>

<key>には、項番1 で作成した「キー」を記載します。これで、対応した「キー」に対してアイテムをホスト側からサーバーへ送ることが出来ます。

<command>には、取得したい「値」を 1 行コマンドラインで取得できるように記載します。この場合は、wmic コマンドを使って、[java.exe]のコマンドラインを取得して、このプロセスでしか使っていない「文字列」を検索して、行数をカウントしてます。

Windows に関しては、値を取得するコマンドを 1 行で記載できれば、以外と簡単に取得できます。コマンドはいろんな方がブログ等で公開してくれているので、まずググってみましょう。

3.仕上げ

項番2 のように[zabbix_agent.conf]を記載できたら、Zabbix Agent のサービスを再起動しましょう。でないと、設定が反映されないです(よく忘れます)。

希望通りの「値」が取得できていることを確認できれば、あとはこのアイテムに対してトリガーをセットすれば、OK です。

【Zabbix】通常のアイテム設定で取得できないプロセス数を取得する

背景

Zabbix のアイテムとしてプロセス数を取得する「proc.num[xxxx]」があります。

正しいプロセス名を指定しているにもかかわらず、取得できないことがあります。

いろんな方から同じような質問を頂くのですが、非常に簡単で設定できるので、こちらに記載します。

設定内容(画面ショットは 3.0 ですが、2.0 系でも大丈夫です)

0.作業の前に

今回監視しようとしているのは、例えば[Dovecot]を動かしているときに起動しているはずの[dovecot/anvil]です(以下のコマンド結果を参照。一部伏せ字)。

こちらを Zabbix のアイテムで「proc.num[“dovecot/anvil”]」を作っても、取得できない場合がありました

# systemctl status dovecot.service
dovecot.service - Dovecot IMAP/POP3 email server
 Loaded: loaded (/lib/systemd/system/dovecot.service; enabled)
 Active: active (running) since Tue, 15 Nov 20xx tt:mm:ss +0900; 16s ago
 Main PID: xxxx (dovecot)
 CGroup: name=systemd:/system/dovecot.service
 ├ xxxx /usr/sbin/dovecot -F
 ├ xxxx dovecot/anvil
 ├ xxxx dovecot/log
 └ xxxx dovecot/config

 

1.最初にアイテムを作成します

対象のホストにて、[アイテム]を選択し、右上にある「アイテムの作成」ボタンを押します。

以下の画面のように作って頂ければと。

名前:Process_dovecot_anvil(任意です)
タイプ:Zabbixエージェント
キー:dovecot_anvil_procnumcheck(任意です。が、ホスト内でユニークになるように設定する必要があります)

2.ホスト側の[zabbix_agent.conf]を修正します

/etc/zabbix/zabbix_agent.conf を vi とかで開きます。

セクション[UserParameter]部分に、以下のように追記します。

・UserParameter=dovecot_anvil.procnumcheck,ps aux | grep “dovecot/anvil” | grep -v “grep” | wc -l

### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined par
ameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=dovecot_anvil.procnumcheck,ps aux | grep "dovecot/anvil" | grep -v
 "grep" | wc -l

何を記載しているかと言うと、文法に則ってます。

文法:UserParameter=<key>,<command>

<key>には、項番1 で作成した「キー」を記載します。これで、対応した「キー」に対してアイテムをホスト側からサーバーへ送ることが出来ます。

<command>には、取得したい「値」を 1 行コマンドラインで取得できるように記載します。この場合は、aux コマンドを使って、[dovecot/anvil]が上がっているかを確認した後に、その「行数」を返すように記載してます。

3.仕上げ

項番2 のように[zabbix_agent.conf]を記載できたら、Zabbix Agent をリスタートしましょう。でないと、設定が反映されないですね。

希望通りの「値」が取得できていることを確認できれば、あとはこのアイテムに対してトリガーをセットすれば、OK です。