amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

Planex のどこでも環境センサーのデータを Zabbix で監視するスクリプト

表題にある通り、Planex のどこでも環境センサーのデータを Zabbix にとばして監視するための php スクリプトを書いてみました。

github.com

使い方等は Readme.md をご参照ください。
製品情報は以下ご参照ください。

www.planex.co.jp

購入したのは2019年のようで、もう3年もたってました。
しばらくセンサーを寝かせていたせいか、なんか温度が他の温度計より2度くらい高い??
様子見ながらもう少し使ってみたいと思います。

P.S.
製品ページよく見たら、THP は販売終了になってた(苦笑)
後継ないのかな??

Zabbix のグラフを Slack に自動投稿する

いろいな情報を集めて、今回の要望を実現する方法として考えたのは以下の通り。

  • Zabbix からグラフをイメージとして取得し保存
  • 保存されたグラフを Slack に投稿
  • 上記をスケジュール設定して任意の時間に実行する

まず、Zabbix からグラフをイメージにして取得するために、以下のスクリプトを作成した。

github.com

続いて画像を Slack に送信するスクリプトを準備。

github.com

上記2つはスクリプトなので、Linux にそれぞれのリポジトリを clone して、cron で実行するようにしたところグラフイメージを送信できた。

それぞれのスクリプトの使用については Readme.md をご参照ください。 適当に作成しているので、ご利用は自己責任でお願いします。 何か不具合とかあればコメントいただければと思います。

Zabbix API でマップの情報を取得

たくさんのマップ情報を取得する必要があり、php で Zabbix API を使ってみた。

github.com

id は id のままでしか表示していないのでぱっと見は何かわからないけど、何か設定変更を行った際には前後で情報取得しておけば変化に気づけるでしょう。

SNMP トラップを送信する実機がなくてもトラップを送受信する術をメモる

経緯

Zabbix を用いて監視を行っています。
監視対象は SNMP 対応機器を中心に監視しています。
SNMP 対応機器ってだいたい SNMP トラップを送信することができるんですよね。
Zabbix 側では飛んできたトラップの種類によって、監視アイテムを分けて運用しています。
そんなSNMP トラップって、標準(一般的)のものもあればベンダー独自実装のものもあり、それらはMIBに定義されています。
MIB を見ればどんなトラップがくるかは想像できるのですが、実際にトラップ飛んだ時にどんな形で Zabbix で見えるのかあらかじめ知っておきたいと思った次第です。

そんなわけで、今回は MIB に定義されているプライベートなトラップを実機なしで送信して、Zabbix でどのように表示がされるのか確認をしてみたいと思います。

環境準備

今回はすでに Zabbix がインストール、稼働している状態となっている OS 上で SNMP のトラップを送受信してみたいと思います。 環境は以下の感じです。

  • OS:CentOS 7
  • Zabbix:4.0.13

Zabbix のインストールを知りたい方は、別途ググってみてください。

利用するモジュール

Zabbix で SNMP トラップを送受信するために、以下2つのパッケージをインストールします。

  • net-snmp-utils
    • net-snmp を使用して便利機能が提供されている
    • 今回メインで使用するのは snmptrapd(受信) と snmptrap(送信) の2つ
  • snmptt
    • snmptrapd と連携して、SNMP トラップを人間が見やすい形式に翻訳(Translate)してくれる。
    • どのように翻訳するかは、ユーザが作成する必要あり。

Zabbix が SNMP トラップを受信する仕組み

前述のモジュールがどんな感じで動作する仕組みなのか、ざっくり書くと以下の感じ。

[SNMP機器] === SNMP トラップ ===> ([snmptrapd] ---> [snmptt] ---> [Zabbix])

※ snmptrapd、snmptt、Zabbix は同一 OS 上で稼働

以下概要

  • SNMP 機器が SNMP トラップを送信すると snmptrapd が受信する。
  • snmptrapd はログを /var/log/messages に記録しつつ、snmptt に受信データを渡す。
    • ここで /var/log/messages に書かれる情報は人間としては見づらい。
  • snmptt は受信したデータを snmptt が個別に保持している翻訳用の情報を用いて翻訳して、ログを /var/log/snmptt/snmptt.log に記録する。
  • Zabbix は /var/log/snmptt/snmptt.log を見て、Zabbix が監視している対象ホストからのトラップログが書かれたら受信データとして記録する。
    • Zabbix は監視していないホストから受信した SNMP トラップのログについては何もしない。

もっとざっくり言うと、受信したトラップは snmptt で人間がわかりやすいように翻訳して、その結果を Zabbix で記録、監視する。

(上記の説明は、以下で設定する内容を踏まえての説明になっています。
ログの保存場所などは設定内容によって変わるので、そのあたりは読み替えてください。)

設定

net-snmp-utils 系のインストール

yum install perl epel-release net-snmp-utils net-snmp-perl perl-Sys-Syslog

snmptrapd.conf の修正

snmptrapd.conf をエディタで開く

vi /etc/snmp/snmptrapd.conf

下記を追記する。(文末でOK)

traphandle default /usr/sbin/snmptthandler
disableAuthorization yes

プロセスの起動(既に動いている場合は停止してから起動)

systemctl stop snmptrapd
systemctl start snmptrapd

自動起動設定(毎回手動起動するなら不要)

systemctl enable snmptrapd

この時点で SNMP トラップを受信したら /var/log/messages で確認できるようになる。
が、内容は SNMP トラップの生情報なので人間の目にはわかりづらい。

受信例

Aug 27 07:01:43 test-03 snmptrapd[2186]: 2022-08-27 07:01:43 localhost [UDP: [127.0.0.1]:51394->[127.0.0.1]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (124606) 0:20:46.06#011SNMPv2-MIB::snmpTrapOID.0 = OID: iso.1.1#011iso.1.1 = STRING: "This is a test."

snmptt のインストール

yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/s/snmptt-1.4.2-1.el7.noarch.rpm

snmptt.conf の設定

このファイルを作成しておくことで、受信したトラップが snmptt.log に記録されるようになる。

snmptt.conf をエディタで開く

vi /etc/snmp/snmptt.conf

今回の検証段階では、snmptt.conf には以下の記載がされていた。

#
#
#
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT Device reinitialized (coldStart)
#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (coldStart)"
SDESC
A coldStart trap signifies that the SNMPv2 entity, acting
in an agent role, is reinitializing itself and that its
configuration may have been altered.
EDESC
#
#
#
EVENT warmStart .1.3.6.1.6.3.1.1.5.2 "Status Events" Normal
FORMAT Device reinitialized (warmStart)
#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (warmStart)"
SDESC
A warmStart trap signifies that the SNMPv2 entity, acting
in an agent role, is reinitializing itself such that its
configuration is unaltered.
EDESC
#
#
#
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link down on interface $1.  Admin state: $2.  Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link down on interface $1.  Admin state: $2.  Operational state: $3"
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state).  This other state is indicated by the included value
of ifOperStatus.
EDESC
#
#
#
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT Link up on interface $1.  Admin state: $2.  Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link up on interface $1.  Admin state: $2.  Operational state: $3"
SDESC
A linkUp trap signifies that the SNMP entity, acting in an
agent role, has detected that the ifOperStatus object for
one of its communication links left the down state and
transitioned into some other state (but not into the
notPresent state).  This other state is indicated by the
included value of ifOperStatus.
EDESC
#
#
#
EVENT authenticationFailure .1.3.6.1.6.3.1.1.5.5 "Status Events" Normal
FORMAT SNMP athentication failure
#EXEC qpage -f TRAP notifygroup1 "SNMP authentication failure"
SDESC
An authenticationFailure trap signifies that the SNMPv2
entity, acting in an agent role, has received a protocol
message that is not properly authenticated.  While all
implementations of the SNMPv2 must be capable of generating
this trap, the snmpEnableAuthenTraps object indicates
whether this trap will be generated.
EDESC

上記の記述だと、coldStart、warmStart、linkDown、linkUp、authenticationFailure 以外のトラップを受信したとき何もログが残らないので、以下の記述を追記する。(文末でOK)

#
#
#
EVENT general .* "General Events" Normal
FORMAT ZBXTRAP $aA Unknown

上記では .* と指定していて、どんな文字のトラップでも、という記載をしている。
この部分を特定の文字(トラップのOID や変数)を指定することで、特定のトラップ受信時には特定のログを記録する、という設定をすることができる。

zabbix_server.conf の設定変更

zabbix_server.conf をエディタで開く

vi /etc/zabbix/zabbix_server.conf

定義されているパラメータを以下の内容に修正

SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1

zabbix-serverプロセスの再起動

systemctl restart zabbix-server

snmptt のデーモン設定

snmptt は standalone モードと daemon モードの2種類で動作可能。
daemon モードの方が多量のトラップを短時間で処理できるのでやっておく。

snmptt.ini をエディタで開く。

vi /etc/snmp/snmptt.ini

下記パラメータを修正。

mode = daemon
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 2
sleep = 5
DEBUGGING = 0
multiple_event = 0
date_time_format = %Y/%m/%d %H:%M:%S
DEBUGGING_FILE = /var/log/snmptt/snmptt.debug
DEBUGGING_FILE_HANDLER = /var/log/snmptt/snmptthandler.debug

サービスの起動

systemctl start snmptt

トラップ送信テスト

localhost を指定して、自分から自分にトラップを送信して、それが受信できるか確認してみる。

snmptrap -v 2c -c test 127.0.0.1 '' .1.1.1 .1.1.1 s "This is a test."

ログの確認

cat /var/log/snmptt/snmptt.log
tail -f /var/log/snmptt/snmptt.log

以下のようなログがでれば成功。

[root@test-03 ~]# tail -f /var/log/snmptt/snmptt.log
2022/08/27 07:01:43  .1.1.1 Normal "General Events" localhost - ZBXTRAP 127.0.0.1 Unknown

上記のトラップは snmptt.ini に記載した EVENT general .* "General Events" Normal にマッチして記録されたログです。
せっかくなので、同じく snmptt.ini に記載されていた coldStart を snmptrap コマンドで送信して結果を見てみる。

送信コマンド

[root@test-03 ~]# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.1

受信ログ確認

[root@test-03 ~]# tail -f /var/log/snmptt/snmptt.log
2022/08/27 07:42:33  .1.3.6.1.6.3.1.1.5.1 Normal "Status Events" localhost - Device reinitialized (coldStart)

Zabbix での受信確認

Zabbix で受信したトラップを確認するにはアイテムを作成する必要がある。
また、SNMP トラップを受信するためには、SNMP インターフェースを持つ監視ホストを作成する必要があるので、以下画像のようにホストをアイテムを作成した。

ホスト作成

アイテム作成(snmptrap.fallback)

設定完了後、以下のコマンドを実行してトラップを受信。

snmptrap -v 2c -c test 127.0.0.1 '' .1.1.1 .1.1.1 s "This is a test."

Zabbix で結果を確認する。

Zabbixトラップ確認(最新データ)

Zabbixトラップ確認(ヒストリ)

受信できた。

もともと snmptt.conf に記載されていた coldStart トラップを受信してみる

/etc/snmp/snmptt.conf の設定を書き換えることで coldStart 等すでに記載されている SNMP トラップを Zabbix で受信できるようになる。

修正箇所は、各トラップの FORMAT の行を FORMAT ZBXTRAP $aA と置換する。
以下にサンプルを記載します。

[root@test-03 ~]# cat /etc/snmp/snmptt.conf
#
#
#
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (coldStart)"
SDESC
A coldStart trap signifies that the SNMPv2 entity, acting
in an agent role, is reinitializing itself and that its
configuration may have been altered.
EDESC
#
#
#
EVENT warmStart .1.3.6.1.6.3.1.1.5.2 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (warmStart)
#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (warmStart)"
SDESC
A warmStart trap signifies that the SNMPv2 entity, acting
in an agent role, is reinitializing itself such that its
configuration is unaltered.
EDESC
#
#
#
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT ZBXTRAP $aA Link down on interface $1.  Admin state: $2.  Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link down on interface $1.  Admin state: $2.  Operational state: $3"
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state).  This other state is indicated by the included value
of ifOperStatus.
EDESC
#
#
#
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA Link up on interface $1.  Admin state: $2.  Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link up on interface $1.  Admin state: $2.  Operational state: $3"
SDESC
A linkUp trap signifies that the SNMP entity, acting in an
agent role, has detected that the ifOperStatus object for
one of its communication links left the down state and
transitioned into some other state (but not into the
notPresent state).  This other state is indicated by the
included value of ifOperStatus.
EDESC
#
#
#
EVENT authenticationFailure .1.3.6.1.6.3.1.1.5.5 "Status Events" Normal
FORMAT ZBXTRAP $aA SNMP athentication failure
#EXEC qpage -f TRAP notifygroup1 "SNMP authentication failure"
SDESC
An authenticationFailure trap signifies that the SNMPv2
entity, acting in an agent role, has received a protocol
message that is not properly authenticated.  While all
implementations of the SNMPv2 must be capable of generating
this trap, the snmpEnableAuthenTraps object indicates
whether this trap will be generated.
EDESC
#
#
#
EVENT general .* "General Events" Normal
FORMAT ZBXTRAP $aA Unknown
[root@test-03 ~]#

上記設定変更して、snmptt を再起動。

systemctl restart snmptt

その後 Zabbix に以下のアイテムを作成。
キーに snmptrap[coldStart] と設定すると、トラップ受信時のメッセージ中に coldStart の文字列が含まれていたらこのアイテムにヒストリとして受信ログが書きこまれる。
[] の中は正規表現で設定可能。

coldStart トラップを送信してみる。

snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.1

受信確認。

受信できた。

最後に

これで snmptrap コマンドでいろいろなトラップを送信することで、Zabbix 側での受信内容を確認することができる。
また、snmptt.conf の実装の確認にも利用できるので、利用できる方は利用してみてください。

Zabbix で MariaDB を使用してテーブルを月単位の RANGE パーティションにするお役立ち目標のスクリプト

作ってみました。
手順は README をご参照くださいませ。
これで自分自身の検証環境作るの楽になる(笑

github.com

MariaDB イベントスケジューラ関連

MariaDB でイベントを使用したいときに使う設定コマンドのメモ。

状態確認

show variables like '%event%';
MariaDB [zabbix]> show variables like '%event%';
+--------------------------------------------------------+-----------+
| Variable_name                                          | Value     |
+--------------------------------------------------------+-----------+
| binlog_annotate_row_events                             | OFF       |
| event_scheduler                                        | OFF       |
| performance_schema_events_stages_history_long_size     | -1        |
| performance_schema_events_stages_history_size          | -1        |
| performance_schema_events_statements_history_long_size | -1        |
| performance_schema_events_statements_history_size      | -1        |
| performance_schema_events_waits_history_long_size      | -1        |
| performance_schema_events_waits_history_size           | -1        |
| replicate_annotate_row_events                          | OFF       |
| replicate_events_marked_for_skip                       | REPLICATE |
+--------------------------------------------------------+-----------+
10 rows in set (0.00 sec)

MariaDB [zabbix]>

設定変更

一時的な設定変更

DB にログインして実行

set GLOBAL event_scheduler=ON;
MariaDB [zabbix]> set GLOBAL event_scheduler=ON;
MariaDB [zabbix]> show variables like '%event%';
+--------------------------------------------------------+-----------+
| Variable_name                                          | Value     |
+--------------------------------------------------------+-----------+
| binlog_annotate_row_events                             | OFF       |
| event_scheduler                                        | ON        |
| performance_schema_events_stages_history_long_size     | -1        |
| performance_schema_events_stages_history_size          | -1        |
| performance_schema_events_statements_history_long_size | -1        |
| performance_schema_events_statements_history_size      | -1        |
| performance_schema_events_waits_history_long_size      | -1        |
| performance_schema_events_waits_history_size           | -1        |
| replicate_annotate_row_events                          | OFF       |
| replicate_events_marked_for_skip                       | REPLICATE |
+--------------------------------------------------------+-----------+
10 rows in set (0.00 sec)

MariaDB [zabbix]>

永続的な設定変更

my.cnf に記載して event 設定を永続的に有効化

my.cnfファイルの [mysqld] セクションに以下を記載する。

event_scheduler = on

イベントの作り方

実行間隔は1日単位だけではなく、月だったり年だっだと色々設定可能。
以下の例では1日おきの設定で記載。

delimiter $$
create event <イベント名>
on schedule every 1 day
starts 'YYYY-MM-DD hh:mm:ss'
do
begin
     <実行するクエリ>
end$$
delimiter ;

イベント一覧の見方

show events\G

イベントの編集

delimiter $$
alter event <イベント名>
on schedule every 1 day
starts 'YYYY-MM-DD hh:mm:ss'
do
begin
     <実行するクエリ>
end$$
delimiter ;

イベントの削除

drop event <イベント名>;

Zabbix のパーティショニングを RANGE で設定

Zabbix 4.0.x で動作確認。

手順

  • Zabbix をインストールする
  • 以下の文字列をファイルに書いて、シェルで以下のコマンドを実行。
mysql -u [ユーザ名] -p zabbix < '以下のSQL文群を保存したファイル名'

SQL文群

パーティションは月単位。RANGEを変える場合は適当にお願いします。

# プライマリキーの作成
# history
DROP INDEX `history_1` ON `history`;
ALTER TABLE `history` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
# history_uint
DROP INDEX `history_uint_1` ON `history_uint`;
ALTER TABLE `history_uint` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
# history_str
ALTER TABLE `history_str` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
# history_text
ALTER TABLE `history_text` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
# history_log
ALTER TABLE `history_log` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);

# パーティションの作成
ALTER TABLE `history` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `history_uint` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `history_str` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `history_text` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `history_log` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `trends` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);

ALTER TABLE `trends_uint` PARTITION BY RANGE (clock) (
PARTITION p2021_06 VALUES LESS THAN (UNIX_TIMESTAMP("2021-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_07 VALUES LESS THAN (UNIX_TIMESTAMP("2021-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_08 VALUES LESS THAN (UNIX_TIMESTAMP("2021-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_09 VALUES LESS THAN (UNIX_TIMESTAMP("2021-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_10 VALUES LESS THAN (UNIX_TIMESTAMP("2021-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_11 VALUES LESS THAN (UNIX_TIMESTAMP("2021-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2021_12 VALUES LESS THAN (UNIX_TIMESTAMP("2022-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_01 VALUES LESS THAN (UNIX_TIMESTAMP("2022-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_02 VALUES LESS THAN (UNIX_TIMESTAMP("2022-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_03 VALUES LESS THAN (UNIX_TIMESTAMP("2022-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_04 VALUES LESS THAN (UNIX_TIMESTAMP("2022-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_05 VALUES LESS THAN (UNIX_TIMESTAMP("2022-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_06 VALUES LESS THAN (UNIX_TIMESTAMP("2022-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_07 VALUES LESS THAN (UNIX_TIMESTAMP("2022-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_08 VALUES LESS THAN (UNIX_TIMESTAMP("2022-09-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_09 VALUES LESS THAN (UNIX_TIMESTAMP("2022-10-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_10 VALUES LESS THAN (UNIX_TIMESTAMP("2022-11-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_11 VALUES LESS THAN (UNIX_TIMESTAMP("2022-12-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2022_12 VALUES LESS THAN (UNIX_TIMESTAMP("2023-01-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_01 VALUES LESS THAN (UNIX_TIMESTAMP("2023-02-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_02 VALUES LESS THAN (UNIX_TIMESTAMP("2023-03-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_03 VALUES LESS THAN (UNIX_TIMESTAMP("2023-04-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_04 VALUES LESS THAN (UNIX_TIMESTAMP("2023-05-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_05 VALUES LESS THAN (UNIX_TIMESTAMP("2023-06-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_06 VALUES LESS THAN (UNIX_TIMESTAMP("2023-07-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_07 VALUES LESS THAN (UNIX_TIMESTAMP("2023-08-01 00:00:00")) ENGINE = InnoDB,
PARTITION p2023_08 VALUES LESS THAN (UNIX_TIMESTAMP("2023-09-01 00:00:00")) ENGINE = InnoDB
);