Epgrecの録画エラーをzabbixで監視・エラー時にはメール送信する


Epgrecを使っていると、希に録画失敗していることがあります。金曜日までその事実に気付かずに、週末に録画番組を見ようとして、ファイルがない時の残念感と言ったら、言葉にできません。特に最終回!!

と言うことで、録画エラーが出るのは仕方ない。ただし、気付けるようにしようということでZabbixを導入し、EpgrecのDB内の値を1時間おきに監視し、エラーが発生した場合にはメール通知するようにしました。

Ubuntu19.10へのzabbixのインストールについては「Ubuntu19.10へzabbix 4.4をインストールする」を参考にしてください。

Epgrecで録画失敗する主な原因

No事象失敗原因
録画ストレージ残容量が0byteです。HDDの容量不足
ソフトウェアもしくは記憶ストレージ・受信チューナーなどハードウェアに異常があります。チューナーの故障や、TVケーブルが抜けている。もしくはTVの電波が弱い/強すぎる。BSの場合にはBSアンテナの異常等
録画失敗] 録画ファイルが存在しません。何かしらのエラーで録画失敗。よくやるのはカーネルアップデート後にpt3ドライバの組み込み忘れ。
/dev/pt*が無いので気付きやすい。

録画失敗の検知方法

mysqlのepgrecデータベースに対して、以下のSQL文を実行することで、直近1時間以内の録画失敗件数を取得できます。この件数をzabbixで見張ります

sudo mysql
use epgrec;

# 1時間以内のエラー件数
select count(message) from Recorder_logTbl where level=2 and logtime > CURRENT_TIMESTAMP() - INTERVAL 60*60*1 SECOND ;

# ご参考:24時間以内のエラーメッセージ
select * from Recorder_logTbl where level=2 and logtime > CURRENT_TIMESTAMP() - INTERVAL 60*60*24 SECOND ;

Ubuntu19.10にODBCドライバをインストールして、DB内のデータを監視する下準備

ODBCドライバをインストール・設定し、その設定をzabbixから利用することで、MySQL上のデータベース・テーブルへSQL文を発行します。

もしも、aptで/usr/lib64/libmyodbc8a.so等が落ちてこなかった場合には、Oracleのサイトから、ODBCドライバの最新版をダウンロードし、/usr/lib64/に該当ドライバをコピーしてください。

sudo apt install odbcinst
odbcinst -j

# 以下のような表示が出る。
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

sudo vi /etc/odbcinst.ini

# odbcinst.iniを以下のように編集・設定する
[MySQL]
Description=ODBC for MySQL
Driver64=/usr/lib64/libmyodbc8a.so
Setup64=/usr/lib64/libmyodbc8S.so
FileUsage=1
[MySQL ODBC 8.0 Unicode Driver]
Driver=/usr/lib64/libmyodbc8w.so
SETUP=/usr/lib64/libmyodbc8S.so
UsageCount=1
[MySQL ODBC 8.0 ANSI Driver]
Driver=/usr/lib64/libmyodbc8a.so
SETUP=/usr/lib64/libmyodbc8S.so
UsageCount=1

sudo vi /etc/odbc.ini

# /etc/odbc.iniを以下のように設定する
[epgrec]
Description     = MySQL Epgrec Database
Driver          = mysql
Server          = 127.0.0.1
User            = epgrec
Password        = VDMDdsadj90cdxzsdcsd <<適宜変更してください
Port            = 3306
Database        = epgrec

# odbcドライバが存在しなかった場合のみ
tar -zxvf mysql-connector-odbc-8.0.19-linux-ubuntu19.10-x86-64bit.tar.gz
cd mysql-connector-odbc-8.0.19-linux-ubuntu19.10-x86-64bit/lib
mv libmyodbc8* /usr/lib64/

# odbc設定の動作確認
isql -v epgrec
use epgrec;

select * from Recorder_logTbl where level=2 and logtime > CURRENT_TIMESTAMP() - INTERVAL 60*60*24 SECOND;

上記isqlによる動作確認で、select結果が取得できれば、ODBCの設定は完了です。続けてzabbixの設定を行います。

Zabbixでepgrecのエラー件数を取得するアイテムを作成する

設定>ホスト>対象ホスト名>アイテムを選択し、アイテムの設定画面に遷移する。

次に、右上のアイテムの作成を押下します。

以下のようにアイテムを設定し、画面下の追加を押下します。(作成済みアイテムのスクリーンショットを取得した為、下図は更新となっています。なお、パスワードは/etc/odbc.iniで設定しているため、入力する必要はありません)

Zabbixにepgrecのエラー件数のグラフを作成する(グラフ作成は行わなくてもOKです)

zabbixのデータ件数を取得しただけだと、実際に何件エラーがあったのかがわかりません。エラーが何件あったかわかるよう、グラフを作成します

右上からグラフの作成を押下します。

下図のように設定をします。

Zabbixにトリガーを作成する

アイテムの作成後、Epgrecのエラー件数が取得されるようになりました。そのエラー件数が1件以上となった場合に検知し、メール送信するようにします。

設定>ホスト>対象ホスト>トリガーを押下します。

トリガーの作成を押下。

名前に「EpgrecErrorCheck」条件式に、「{fileserver:db.odbc.select[,epgrec].last()}>0」を設定します。

深刻度は、Epgrecのエラーが発生した場合、どの程度深刻化によって適宜値を設定してください。私の場合、重度の障害以上です。

メール送信設定を行う

残りのタスクとして、メール送信の設定を行います。

管理>メディアタイプからEmailを選択します。(私は、ほかのメディアタイプは利用していないので、無効化してあります。)

メールの設定は適宜実施してください。私の環境では、ローカルにpostfixサーバを構築しており、メールは全てpostfixへsmtpで投げつければいいようにしています。

ちなみに、ローカルのpostfixサーバは外部で契約しているメールサーバへメール中継し、最終的にgmailアカウントへメールを転送する設定としています。

管理者アカウントへメール送信されるように設定する

自宅のサーバであれば、管理者ユーザーが自身であることが多いと思います。私も同様ですので、Adminアカウントへのメール通知の設定を編集します。

重度以上の障害のみ、メール通知されるようにします。

以上で設定完了です。

最後に

ZabbixでEpgrecが録画失敗した場合にエラーメッセージを送信できるようにしました。設定以降はチューナーエラーが発生した場合には、定期的な番組表の更新でエラーとなっただけでエラーとなりました。エラーが通知された後は、次の録画予約までにエラーを解消することが出来るようになりました。

PX-W3PE4を利用している方はPT3に安定性ではまだ及ばないかと思います。エラーが出始めた場合にすぐに気づき、対処することが出来るようにることで、快適な録画環境が構築できれば幸甚です。

タグ , , , . ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください