目次

Pandora FMS の最適化と問題解決

Pandora FMS ドキュメント一覧に戻る

Pandora FMS server can monitor about 2000 devices (between 5 and 80 thousands modules, depending on available hardware); but this also requires fine-tuning the database configuration.

Pandora FMS サーバは、約 2000のデバイス(5 から 8万モジュール、ハードウエアに依存します)のモニタリングが可能です。ただし、そのためには、データベースの設定を調整する必要があります。

This article also explains some techniques to detect and solve problems of your Pandora FMS installation.

この章ではまた、Pandora FMS の問題発見および解決のためのテクニックについて説明します。

Percona の最適化

All tests and validations are performed with Percona Server for MySQL® 8 (recommended option). Due to the similarities between Percona Server for MySQL 8 and MySQL® 8 there is great compatibility between both solutions. For the practical purposes of this topic the term MySQL is used, always bearing in mind that tests are performed on Percona Server for MySQL.

すべてのテストと検証は、Percona Server for MySQL® 8 (推奨オプション) を使用して実行しています。Percona Server for MySQL 8 と MySQL® 8 は類似しているため、両方のソリューションの間には優れた互換性があります。ここでの説明では MySQL という用語が使用されています が、テストは Percona Server for MySQL で実行されることを常に念頭に置いてください。

To learn more about “Data Backup and Recovery in Pandora FMS”, follow this link.

“Pandora FMS におけるデータバックアップとリカバリ” についての詳細は、こちらを参照してください。

一般的に推奨する設定

To work with tables larger than 2 GB, it is necessary to follow some guidelines:

2GiBを超えるテーブルを持つ巨大なシステムを必要とするのであれば、次のガイドラインに従う必要があります。

The use of SSD disks is recommended due to their speed and improved system latency.

システムの応答時間を早めるために、SSD を利用することをお勧めします。

Please note that the following items greatly affect performance:

以下の点においてパフォーマンスは大きく影響を受けることに注意してください。

バイナリログ出力の停止

If you configured a Pandora FMS HA system, the binary replication is necessary. This recommendation is only valid if you have a single Pandora FMS server.

Pandora FMS HA システムを設定している場合は、バイナリログは必須です 。ここに記載している内容は、Pandora FMS サーバが 1台の場合にのみ有効です。

It is enabled by default on most GNU/Linux distros. To disable it, edit the my.cnf file, usually in /etc/my.cnf and comment the following lines:

多くの GNU/Linux ディストリビューションにおいてデフォルトで有効になっています。無効にするには、my.cnf ファイル (通常、/etc/my.cnf にあります) を編集し、次の行をコメントアウトします。

# log-bin=mysql-bin
# binlog_format=mixed

Comment both lines, and then restart MySQL Server.

両方の行をコメントアウト し、MySQL サーバを再起動します

ディスク I/O パフォーマンス

To learn more about “Data Backup and Recovery in Pandora FMS”, go to this link.

“Pandora FMS におけるデータバックアップとリカバリ” に関する詳細は、こちらを参照してください。

There are three very important configuration tokens, directly related to disk IO, and should be considered because improper IO access is usually the most important bottleneck in MySQL.

ディスク I/O に直結し、考慮すべきとても重要な 3つの設定があります。MySQL において、不適切な I/O アクセスは、通常最も重要なボトルネックになります。

innodb_log_file_size

innodb_log_file_size = 64M

This value is set by default, which can be higher (even 512M) without any risk, except for recovery in case of any problem or higher disk occupation. The default value of MySQL is 5M, which is very low for production environments with high transaction volume. To change this value with an already running system:

デフォルトではこの値が設定されていますが、問題が発生した場合の回復とディスク占有率が増えることを除いては、事前検証なしに高くすることができます(512Mでも)。 MySQL のデフォルト値は 5M です。これは、トランザクション量が多い本番環境では非常に低い値です。 稼働中のシステムで値を変更するには、次のようにします。

  1. First make a complete DUMP in the databases.
  2. Delete the Innodb binary index files (usually in /var/lib/mysql/ib*.
  3. Change file my.cnf with the hosen value.
  4. Restart MySQL.
  5. Load the SQL DUMP.
  1. データベースのフルバックアップ(SQL ダンプ)を行います。
  2. Innodb バイナリインデックスファイル(通常は /var/lib/mysql/ib* です)を削除します。
  3. my.cnf を編集します。
  4. MySQL を再起動します。
  5. ダンプを読み込みます。

Since the process is the same as the one to activate the innodb_file_per_table token (described below), it is recommended to do the whole process simultaneously.

サーバは、新たなトランザクションログファイルを新たなサイズで再生成し、通常通り動きだします。この処理は innodb_file_per_table トークン(後述)を有効化するのと同じであるため、処理全体を同時に行うことをお勧めします。

innodb_io_capacity

innodb_io_capacity = 300

This parameter has the value 200 by default, but you have to know the IOPS of the system disk. You may find out exactly by looking for IOPS and the exact hard disk model, where the recommended values are: 7500RPM → 100 IOPS, 15000 RPM → 190 IOPS, SSD → 1500 IOPS. More information in this link.

デフォルトでは、このパラメータの値は 200 です。ただし、事前にシステムのディスクの IOPS を知る必要があります。正確な IOPS およびハードディスクのモデルを知ることができます。ここでのお勧めの値は、7500RPM → 100 IOPS, 15000 RPM → 190 IOPS, SSD → 1500 IOPS です。詳しくはこちらのリンクを参照ください。

innodb_file_per_table

Use a tablespace for each table:

テーブルごとにファイルを作成します。

In Percona, itis possible to store each InnoDB table and its index in its own file. This feature is called “multiple tablespaces” because each table has its own table space.

Percona では各 InnoDB テーブルとそのインデックスを独自のファイルに保存することができます。この機能は、各テーブルに独自のテーブルスペースがあるため、“マルチプルテーブルスペース” と呼ばれます。

The use of multiplespace tables can be useful for users that want to move specific tables to separate physical disks or the ones who want to restore table backups without interrupting the use of the rest of the InnoDB tables.

マルチプルスペーステーブルの使用は、特定のテーブルを別々の物理ディスクに移動したい場合や、残りの InnoDB テーブルの使用を中断せずにテーブルのバックアップを復元したい場合に役立ちます。

Multiple tablespaces can be enabled by adding this line to the mysqld section of the my.cnf file:

マルチプルテーブルスペースは my.cnfmysqld セクションに以下の設定を追加することにより有効化できます。

[mysqld]
innodb_file_per_table

After restarting the server, InnoDB will store each new created table in its own name_table.ibd file in the database directory to which the table belongs to. This is similar to what the MyISAM store motor does, but MyISAM divides the table in a tbl_name.MYD data file and a tbl_name.MYI index file.

サーバーを再起動した後、InnoDB は、新しく作成された各テーブルを、テーブルが属するデータベースディレクトリ内の独自の name_tabla.ibd ファイルに保存します。これは MyISAM が行う動作と似ていますが、MyISAM はテーブルを tbl_name.MYD データファイルと tbl_name.MYI インデックスファイルに分割します。

For InnoDB, data and index are kept together in the .ibd file. The tbl_name.frm file should be created as usual. If the innodb_file_per_table line is take off from my.cnf and the server is restarted (see previous instructions for innodb_log_file_size), then InnoDB will create again the tables in the shared table space files.

InnoDB の場合、データとインデックスは .ibd ファイルにまとめて保持されます。tbl_name.frm ファイルは通常どおり作成する必要があります。innodb_file_per_table 行が my.cnf から削除され、サーバが再起動された場合、InnoDB は共有表スペース・ファイルに表を再作成します。

innodb_file_per_table parameter affects only table creation. If you start the server with this option, then the new tables will be created using .ibd files, but you could still have access to the existing tables in the shared tablespace. If you remove the option, then the new tables will be created in the shared space, but it will be still possible to have access to the tables created in multiple tablespaces.

innodb_file_per_table は、テーブルの作成にのみ影響します。 このオプションを使用してサーバを起動すると、.ibd ファイルを使用して新しいテーブルが作成されますが、共有テーブルスペース内の既存のテーブルに引き続きアクセスできます。このオプションを削除すると、共有スペースに新しいテーブルが作成されますが、複数のテーブルスペースに作成されたテーブルにアクセスすることは引き続き可能です。

トランザクションごとのディスク書き込みの回避

MySQL establishes autocommit = 1 for each connection by default. This is not bad for MyISAM, since what one person writes in the disk is not guaranteed, but for InnoDB, it means that any insert / update / delete in an InnoDB table will be registered on the disk (flush).

デフォルトでは、MySQLは各接続開始時の autocommit の値を autocommit = 1 としています。MyISAMの場合、更新結果がディスクに保存されることを保証していないため、この設定はそんなに悪い設定ではありません。しかしInnoDBの場合、InnoDB テーブルへのあらゆる insert / update / delete によって、ディスクへの書き込みが発生するということを意味します。

So, would it be bad if it always writes on the disk? Not at all. It ensures that when there is any compromising event, the data will be there when the database is restored after an incident. The problem is that the DB performance is limited by the physical speed of the disk.

さて、常にディスクへ書き込むのはよくないのでしょうか?そんなことはありません。これにより、侵害イベントが発生した場合でも、インシデント後にデータベースが復元されたときにデータが確実に存在するようになります。問題は、DBのパフォーマンスがディスクの物理的な速度によって制限を受けることです。

Given that the disk has to write the data in a disk before the writing isconfirmed, this will take some time. Even when considering a searching average time of 9 ms for disk writing, it is limited to approximately 67 commits per second, which is very slow. And while the disk is busy trying for the sector to be written, it cannot read.

書き込みが確認される前にディスクにデータを書き込む必要があるため、これには時間がかかります。ディスクの書き込みに平均9msかかるとしてと、おおよそ1秒当たり67コミットに制限されます。これは非常に遅いです。そして、ディスクのあるセクタに書き込み中は、そのセクタを読み込むことはできません。

InnoDB can avoid some of these limitations by associating some writing together, but, even with this, this restriction still exists. You may prevent if from writing at the end of each transaction, ensuring that it uses an “automatic” writing system, which writes approximately every second. In case of failure, the data from the last second could be lost, but this is something more bearable considering that it achieves greater efficiency. To do it, use the following configuration token innodb_flush_log_at_trx_commit = 0. It has this value in the configuration by default.

InnoDBはこれらの制限のいくつかを複数の書き込みを同時に実行することで回避しています。しかしそれでも制約が存在します。システムによる“自動”書き込み(およそ1秒ごとに書き込みを行う)を利用することで、各トランザクションが完了するたびにディスクへ書き込むことを回避することができます。問題が発生した場合、最近1秒のデータが失われますが、パフォーマンス向上を得ようとしていることを考慮すれば、許容できる範囲でしょう。デフォルトでは、innodb_flush_log_at_trx_commit = 0 となっています。

KeyBuffer の大きさ

システムに搭載された物理メモリ量に依存しますが、非常に重要なグローバル変数であり、これを設定することでDELETEおよびSELECTの実行速度が改善されます。

key_buffer_size = 4M

This is the default value in the configuration.

上記は、デフォルトの設定値です。

他の重要なバッファ

There are several buffers that are empty by default in some distributions. Modifying these parameters can improve performance significantly compared to the default one. It is important to make sure that these tokens exist in MySQL configuration file.

いくつかのディストリビューションでは、デフォルトで設定されていないいくつかのバッファがあります。これらのパラメータを設定することによりデフォルトより高いパフォーマンスを得ることができます。これらのトークンが MySQL の設定ファイルに存在するかどうかを確認することが重要です。

key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=1M
join_buffer_size=4M

For MySQL version 8, and later versions, MySQL development team has withdrawn support for query cache, used in previous versions of Pandora FMS; for more information, please visit the following web link:

https://dev.mysql.com/blog-archive/mysql-8-0-retiring-support-for-the-query-cache/ .

MySQL バージョン 8 以降では、query cache のサポートが廃止されました。詳細については以下を参照してください。

https://dev.mysql.com/blog-archive/mysql-8-0-retiring-support-for-the-query-cache/ .

InnoDB の同時実行スレッド

There is a parameter that may affect MySQL server performance with Pandora FMS. This parameter is innodb_thread_concurrency. This parameter is used to specify how many “concurrent threads” MySQL can execute.

Pandora FMS の MySQL サーバパフォーマンスを向上に有効なパラメータがあります。そのパラメータは、innodb_thread_concurrency です。このパラメータは、MySQL で “同時実行スレッド” をいくつにするのかを設定するのに利用します。

This is an advanced parameter and should only be modified manually if performance tuning is required on high concurrency systems.

これは高度なパラメータであり、多くの同時実行を行うシステムでパフォーマンスチューニングが必要な場合 のみ手動で変更する必要があります。

A wrong setting of this parameter may cause it to run slower than default, so it is especially important to pay attention to several aspects:

このパラメータがうまく設定されていない場合、デフォルトよりも遅くなることがあります。そのため、次のような情報に注意を払うことが特に重要です。

The recommended value is the number of (physical) CPUs multiplied by 2 plus the number of disks where InnoDB is located.

推奨値は、CPU(物理)の数に 2を掛けたものに、InnoDB が配置されているディスクの数を加えたものです。

The value of innodb_thread_concurrency changed in several MySQL versions, currently the default value is 0. A value of 0 means “open as many threads as possible”. Therefore, if in doubt, it can be used:

innodb_thread_concurrency の値は MySQL のいくつかのバージョンで変更されています、現在デフォルト値は 0 です。 0 は「可能な限り多くのスレッドを開く」ことを意味します。 したがって、良くわからない場合は次のように設定できます。

innodb_thread_concurrency = 0

MySQL フラグメンテーション

Like filesystems,databases also will fragment themselves, slowing the whole system down. In a high performance system such as Pandora FMS, it is key for the database state to not affect system performance. In overloaded systems, the database could block and force the monitoring system to fall down.

ファイルシステムのように、データベースもフラグメンテーションが発生しシステム全体の速度が低下します。PandoraFMS のように高いパフォーマンスを必要とするシステムでは、高速で信頼性の高いデータベースが必要です。高負荷なシステムでは、監視システムが停止する可能性があります。

Setting up MySQL server could make Pandora FMS become faster, so if you have performance problems, the reason might be a problem in MySQL Setup or problems related with the database.

Pandora FMS で良いパフォーマンスを得るには、MySQL の設定がとても重要です。パフォーマンスの問題がある場合は、MySQL の設定やデータベースに関する問題である可能性があります。

my.cnf 設定の確認

First check my.cnf file and its basic configuration for MySQL. This configuration file is written in INI format and its location can be determined with the following command:

MySQL サーバの “基本設定” である my.cnf から確認します。設定ファイルは、INI フォーマットで書かれており、次のコマンドで場所を確認できます。

mysqld --help --verbose | more

my.cnf setup should be similar to this one (4 GB RAM Server and using an average server hardware). Make sure that you have all these parameters correctly inside section [mysqld]:

my.cnf は以下のような設定ファイルになっています(この例は、メモリ 4GB の平均的なサーバハードウエアです)。[mysqld] セクション内のトークンを確認します。

[mysqld]
 datadir=/var/lib/mysql
 socket=/var/lib/mysql/mysql.sock
 user=mysql
 character-set-server=utf8mb4
 skip-character-set-client-handshake

 max_allowed_packet = 64M
 innodb_buffer_pool_size = 800M
 innodb_lock_wait_timeout = 90
 innodb_file_per_table
 innodb_flush_log_at_trx_commit = 0
 innodb_flush_method = O_DIRECT
 innodb_log_file_size = 64M
 innodb_log_buffer_size = 16M
 innodb_io_capacity = 100
 thread_cache_size = 8
 thread_stack    = 256K
 max_connections = 100

 key_buffer_size=4M
 read_buffer_size=128K
 read_rnd_buffer_size=128K
 sort_buffer_size=1M
 join_buffer_size=4M

 sql_mode=""

 [mysqld_safe]
 log-error=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid

If you are using MySQL 8 and do not have an HA environment, disable the binary logs with the following command in section [mysqld]:

MySQL 8 を使用しており、HA 環境がない 場合は、セクション [mysqld] で次のコマンドを使用してバイナリ ログを無効にします。

skip-log-bin

If there is any change in my.cnf file, restart MySQL service.

my.cnf ファイルを変更した場合は、MySQL サービスを再起動します。

データベースのリストア

To learn more about “Server Management and Administration”, follow this link.

サーバ管理のより詳細は、こちらを確認してください。

When making certain modifications to my.cnf (for example, adding the innodb_file_per_table parameter), it is likely that the database will not work when restarting the service. If you get the following error, you should restore the previous configuration (you should use root user credentials or root user) and back up the database:

my.cnf に特定の変更を加えると (たとえば、innodb_file_per_table パラメータを追加するなど)、サービスを再起動したときにデータベースが機能しなくなる可能性があります。次のエラーが発生した場合は、以前の設定を復元し (管理者権限または root ユーザ を使用する必要があります)、データベースをバックアップする必要があります。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 67108864 bytes!

1. Back up the database:

1. データベースをバックアップします。

mysqldump -uroot -p pandora > /home/pandora/pandora.sql

2. Stop MySQL server and move the data to a backup folder:

2. MySQL サーバを停止し、バックアップフォルダへデータを移動します。

systemctl stop mysql
mv /var/lib/mysql /var/lib/mysql.bak

3. Create a new folder for MySQL data (the relevant permissions will be assigned in step five):

3. MySQL データ用の新たなフォルダを作成します(関連する権限はステップ5で割り当てられます)。

mkdir /var/lib/mysql

4. Initialize MySQL server by specifying the target folder in the parameter --datadir. This process will generate a temporary password which must be noted down (it will be displayed by standard output or stored in /var/lib/mysqld.log):

4. パラメータ --datadir でターゲット フォルダを指定して、MySQL サーバーを初期化します。このプロセスにより、メモしておく必要がある一時パスワードが生成されます (標準出力に表示されるか、/var/lib/mysqld.log に保存されます)。

mysqld --initialize --datadir /var/lib/mysql

5. Assign the appropriate permissions to the new folder:

5. 新しいフォルダーに適切な権限を割り当てます。

chown -R mysql:mysql /var/lib/mysql
chcon -R system_u:object_r:mysqld_db_t:s0 /var/lib/mysql

6. Start MySQL service and log in with MySQL client, using the password from step four:

6. MySQL サービスを起動し、手順 4 のパスワードを使用して MySQL クライアントでログインします。

systemctl start mysql
mysql -uroot -p

MySQL/Percona systems often do not load correctly the configuration parameters of the my.cnf file, usually because these values have been written outside [mysqld] section.

MySQL/Percona システムでは、多くの場合、my.cnf ファイルの設定パラメータが正しく読み込まれません。これは通常、これらの値が [mysqld] セクションの外部に書き込まれている ためです。

7. Change the user password root to the one of your choosing (here we use Pandor4!):

7. ユーザ root のパスワードを任意のパスワードに変更します (ここでは Pandor4! を使用します)。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Pandor4!';

8. Exit MySQL client and check that you can log in again using the new password.

8. MySQL クライアントを終了し、新しいパスワードを使用して再度ログインできることを確認します。

9. Access MySQL client again and create the database:

9. MySQL クライアントに再度アクセスし、データベースを作成します。

CREATE DATABASE pandora;
USE pandora;

10. Load the backup from the database:

10. データベースへバックアップをロードします。

SOURCE /home/pandora/pandora.sql

11. Create the access users for Pandora FMS using the same credentials as in the previous installation (here Pandor4! is used) and then give them permissions over the database:

11. 以前のインストールと同じ資格情報を使用 (ここでは Pandor4! を使用) して、Pandora FMS のアクセスユーザを作成し、データベースに対する権限を付与します。

CREATE USER 'pandora'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Pandor4!';
CREATE USER 'pandora'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'Pandor4!';
GRANT ALL PRIVILEGES ON pandora.* TO 'pandora'@'localhost';
GRANT ALL PRIVILEGES ON pandora.* TO 'pandora'@'127.0.0.1';

12. After having configured my.cnf file and restarted MySQL service, you should check that these changes have been correctly applied. To that end, check the variables one by one:

12. my.cnf ファイルを設定して MySQL サービスを再起動した後、これらの変更が正しく適用されていることを確認する必要があります。そのためには、変数を 1 つずつ確認します。

SHOW VARIABLES LIKE 'innodb_log_file_size';
SHOW VARIABLES LIKE 'innodb_io_capacity';
SHOW VARIABLES LIKE 'innodb_file_per_table';

Or with a general inquiry such as:

または、次のような一般的な問い合わせでも構いません。

SHOW VARIABLES LIKE "innodb%";

Once you check that Pandora FMS (both Web Console and server) can connect correctly to the database and everything works properly, you may delete mysql.bak directory:

Pandora FMS (Web コンソールとサーバの両方) がデータベースに正しく接続でき、すべてが正常に動作することを確認したら、mysql.bak ディレクトリを削除できます。

rm -rf /var/lib/mysql.bak

各テーブルごとに分割されたデータファイルがアクティブであるか確認

ls -lah /var/lib/mysql/pandora/*.ibd | wc -l

There should be more than 100 files there (depending on the version of Pandora FMS), each .ibd is the data file of each table, when innodb_file_per_table parameter is enabled in file my.cnf. If you do not have any of these files, .ibd means it uses a single file to store all information. The previous one means table fragmentation is also present on all tables and performance will worsen each week.

my.cnf ファイルで innodb_file_per_table トークンを有効化した場合、それぞれのテーブルに対応した .ibd ファイルが 100以上(Pandora FMS のバージョンに依存)存在します。このようなファイルが無い場合は、全データが大きなファイルに記録されます。これは、テーブルのフラグメンテーションが全テーブル共通して発生し、毎週パフォーマンスが劣化することを意味します。

If you have your database running in a single database, first you will need to recreate the database after correctly configuring file my.cnf and restarting MySQL.

すでに単一のデータベースで実行している場合は、mycnf ファイルの設定を変更し MySQL を再起動したあとにデータベースを再作成する必要があります。

特定のテーブルの最適化

Another less “drastic” solution to solve the fragmentation issue is the use of MySQL OPTIMIZE tool to optimize certain Pandora FMS tables. To benefit from it, run right away from MySQL the following:

断片化の問題を解決するためのもう 1 つの「それほど劇的ではない」解決策は、MySQL OPTIMIZE ツールを使用して Pandora FMS の特定のテーブルを最適化することです。これを利用するには、MySQL から直接以下を実行します。

OPTIMIZE TABLE tagente_datos;
OPTIMIZE TABLE tagente;
OPTIMIZE TABLE tagente_datos_string;
OPTIMIZE TABLE tagent_access;
OPTIMIZE TABLE tagente_modulo;
OPTIMIZE TABLE tagente_estado;

This prevents performance from degrading over time as the system works.

これにより、システムが稼働しているときに時間の経過とともにパフォーマンスが低下するのを防ぎます。

In large environments, the OPTIMIZE option could be “blocked”. In this case, the best option is to rebuild the DB.

非常に大規模な環境では、OPTIMIZE オプションが「ブロック」される可能性があります。この場合、最善のオプションは DB を再構築 することです。

After doing these operations, run:

これらの操作を行った後、次を実行します。

FLUSH TABLES;

From MySQL manual:

MySQL マニュアルより:

For InnoDB tables, OPTIMIZE TABLE is mapped to ALTER TABLE, which rebuilds the table to update index statistics and free unused space in the clustered index”.

InnoDB テーブルの場合、OPTIMIZE TABLE は ALTER TABLE にマップされ、テーブルを再構築してインデックス統計を更新し、クラスター化インデックス内の未使用領域を解放します 」。

MySQL 特殊トークン

There are some very “special” tokens in MySQL, which can improve or worsen performance:

MySQL には、パフォーマンスを向上させたり低下させたりできる非常に「特別な」トークンがいくつかあります。

innodb_flush_method = O_DIRECT

This important parameter has an effect on how information is written on the disk.

この重要なパラメータは、ディスクに情報が書き込まれる方法に影響します。

innodb_lock_wait_timeout = 90

This helps when there is a bottleneck, so that MySQL does not fall and stop. If it lasts more than 90 lock, there is a real problem.

これはボトルネックがある場合に役立ち、MySQL が停止することはありません。90 ロックを超えて続く場合は、実際に問題が発生しています

テーブルごとのフラグメンテーションを確認

Using MySQL CLI, run this query:

MySQL の CLI を使って、以下のクエリを実行します。

SELECT ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) AS data_length , round(INDEX_LENGTH/1024/1024)
 AS index_length, round(DATA_FREE/ 1024/1024) AS data_free, (data_free/(index_length+data_length))
 AS frag_ratio FROM information_schema.tables
 WHERE TABLE_TYPE = 'BASE TABLE' AND DATA_FREE> 0 ORDER BY frag_ratio DESC;

You should get only the tables with some fragmentation index, for example:

フラグメンテーションのあるテーブルが次のように表示されます。

+--------+-------------------------+-------------+--------------+-----------+------------+
| ENGINE | TABLE_NAME              | data_length | index_length | data_free | frag_ratio |
+--------+-------------------------+-------------+--------------+-----------+------------+
| InnoDB | tserver_export_data     |           0 |            0 |         5 |   320.0000 |
| InnoDB | tagent_module_inventory |           0 |            0 |         6 |    25.6000 |
| InnoDB | tagente_datos_inventory |           4 |            0 |        40 |     9.8842 |
| InnoDB | tsesion_extended        |           1 |            0 |         4 |     3.3684 |
| InnoDB | tagent_access           |           2 |            7 |        27 |     2.9845 |
| InnoDB | tpending_mail           |           2 |            0 |         4 |     2.6392 |
| InnoDB | tagente_modulo          |           2 |            0 |         4 |     2.1333 |
| InnoDB | tgis_data_history       |          24 |           11 |        67 |     1.9075 |
| InnoDB | tsesion                 |           2 |            0 |         4 |     1.7778 |
| InnoDB | tupdate                 |           3 |            0 |         3 |     1.1852 |
| InnoDB | tagente_datos           |         186 |          194 |       399 |     1.0525 |
| InnoDB | tagente_datos_string    |          15 |            9 |        24 |     0.9981 |
| InnoDB | tevento                 |         149 |           62 |        46 |     0.2183 |
| InnoDB | tagente_datos           |        2810 |         2509 |        65 |     0.0122 |
| InnoDB | tagente_datos_string    |         317 |          122 |         5 |     0.0114 |
+--------+-------------------------+-------------+--------------+-----------+------------+

This query works only on tables with more than 10 % of fragmentation. Too big tables (like tagente_datos) can take a lot of time to get optimized if they are very fragmented. This may affect the production system.

このクエリは、断片化が 10 % を超えるテーブルでのみ機能します。大きすぎるテーブル (tagente_datos など) は、断片化が激しい場合、最適化に長い時間がかかることがあります。これは、実稼働システムに影響を与える可能性があります。

Caution is advised when optimizing such large tables. A normal environment could be optimized once a year and larger environments every six months.

このような大きなテーブルを最適化する場合は注意が必要です。通常の環境は 1 年に 1 回、大規模な環境は 6 か月ごとに最適化できます。

To optimize the tagent_module_inventory table (in this case the database is called pandora):

tagent_module_inventory テーブルを最適化する (この場合、データベースの名前は pandora) には次のようにします。

OPTIMIZE TABLE pandora.tagent_module_inventory;

A warning message will appear:

次のような警告メッセージが表示されます。

"Table does not support optimize, doing recreate + analyze instead".

If you check again, you should see fragmentation is gone:

再度確認すると、フラグメンテーションが無くなっていることがわかります。

+--------+-------------------------+-------------+--------------+-----------+------------+
| ENGINE | TABLE_NAME              | data_length | index_length | data_free | frag_ratio |
+--------+-------------------------+-------------+--------------+-----------+------------+
| InnoDB | tserver_export_data     |           0 |            0 |         5 |   320.0000 |
| InnoDB | tagente_datos_inventory |           4 |            0 |        40 |     9.8842 |
| InnoDB | tsesion_extended        |           1 |            0 |         4 |     3.3684 |
| InnoDB | tagent_access           |           2 |            7 |        27 |     2.9845 |
| InnoDB | tpending_mail           |           2 |            0 |         4 |     2.6392 |
| InnoDB | tagente_modulo          |           2 |            0 |         4 |     2.1333 |
| InnoDB | tgis_data_history       |          24 |           11 |        67 |     1.9075 |
| InnoDB | tsesion                 |           2 |            0 |         4 |     1.7778 |
| InnoDB | tupdate                 |           3 |            0 |         3 |     1.1852 |
| InnoDB | tagente_datos           |         186 |          194 |       399 |     1.0525 |
| InnoDB | tagente_datos_string    |          15 |            9 |        24 |     0.9981 |
| InnoDB | tevento                 |         149 |           62 |        46 |     0.2183 |
| InnoDB | tagente_datos           |        2810 |         2509 |        65 |     0.0122 |
| InnoDB | tagente_datos_string    |         317 |          122 |         5 |     0.0114 |
+--------+-------------------------+-------------+--------------+-----------+------------+

To be able to perform this optimization, there must be enough space on the hard disk to perform the operation. Otherwise an error will appear and the operation will not be performed.

最適化を実行するには、操作を実行できるだけのディスクの空き容量が必要です。そうでないとエラーとなり処理が実行されません。

システム負荷

This is more general, but you need to make sure the system IO is not a bottleneck (disk). Run the following command to collect the system information:

より一般的な事として、システムの(ディスク) I/O がボトルネックになっていないことを確認する必要があります。システムの状態を取得するのに、vmstat コマンドを実行します。

vmstat 1 10

Look at the last columns (CPU WA), a value higher than 10 means that there is a disk I/O problem that should be solved.

最後のカラム (CPU WA) を見て、10より大きい値であればディスク I/O の問題があり、解決する必要があります。

Having high CPU-US is normal, but CPU-SY should not be over 10~15.

CPU-US が高いのは通常です。しかし、CPU-SY は 10~15 を超えないようにすべきです。

Usually, SWAP-SI and SWAP-SO should have value zero, if not, it means the system is using SWAP memory, which degrades performance. Increase RAM or decrease RAM usage in your applications (Pandora FMS server threads, Buffers in MySQL, etc.).

SWAP-SI および SWAP-SO はゼロであるべきです。そうでなければシステムがスワップメモリを使っていることを意味し、パフォーマンスを落とします。メモリを増やすか、アプリケーションが使うメモリを減らす(Pandora サーバのスレッド、MySQL のバッファの調整など)必要があります。

Sample output of a “normal” system:

以下は、“正常” なシステムの出力サンプルです。

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id  wa st
 0  0  46248  78664 154644 576800    0    0     2   147    0    9  7 10 83  0  0
 0  0  46248  78656 154644 576808    0    0     0     0   49   37  0  0 100 0  0
 2  0  46248  78904 154648 576740    0    0     0   184  728 2484 63  6 31  0  0
 0  0  46248  79028 154648 576736    0    0    16   616  363  979 21  0 79  0  0
 1  0  46248  79028 154648 576736    0    0     0    20   35   37  0  1 98  1  0
 0  0  46248  79028 154648 576736    0    0     0     0   28   22  0  0 100 0  0
 1  0  46248  79028 154648 576736    0    0     0  3852  141  303  0  0 98  2  0
 2  0  46248  78904 154660 576660    0    0     0   188  642 2354 56  4 40  0  0
 1  0  46248  78904 154660 576680    0    0     0    88  190  634 13  0 86  1  0
 1  0  46248  78904 154660 576680    0    0     0    16   35   40  0  0 100 0  0
 1  0  46248  78904 154660 576680    0    0     0     0   26   21  0  0 100 0  0
 0  0  46248  78904 154660 576680    0    0     0     0   27   27  0  0 100 0  0
 1  0  46248  78904 154724 576616    0    0   112   192  608 2214 52  4 44  0  0
 0  0  46248  78904 154724 576616    0    0     0    76  236  771 16  0 84  0  0
 0  0  46248  78904 154724 576616    0    0     0    20   38   38  0  0 100 0  0
 0  0  46248  78904 154724 576616    0    0     0     0   31   21  0  0 100 0  0
 0  0  46248  78904 154740 576608    0    0     0  3192  187  322  1  0 96  3  0
 1  0  46248  79028 154756 576544    0    0    16   192  632 2087 53  5 42  0  0
 0  0  46248  79028 154760 576568    0    0     0    56  255  927 19  2 79  0  0
 0  0  46248  79028 154768 576564    0    0     0    20   33   44  0  0 100 0  0

MySQL テーブルパーティショニング

To use MySQL table partitioning, you should also use the multiples tablespaces system described above (innodb_file_per_table).

MySQL テーブルパーティショニングを使用するには、上記で説明した 複数のテーブルスペース システム (innodb_file_per_table) も使用する必要があります。

MySQL supports table partitioning, which allows very large tables to be distributed into smaller chunks, such as logical subdivisions (see the MySQL manual for details).

MySQL はテーブルパーティショニングをサポートしており、これにより、非常に大きなテーブルを論理的なサブディビジョンなどの小さなチャンクに分散できます (詳細については、MySQL マニュアル を参照してください)。

If you have large amounts of data in Pandora FMS database (main and history) and it is estimated that many Console operations that refer to that data (for example drawing graph) are slow, then it will improve its performance using table partitioning.

もし Pandora FMS (メインおよびヒストリの両方の)データベースに大量のデータがあり、グラフ描画のようなデータを参照する処理がとても遅いと感じるなら、テーブルパーティショニングを行うことでパフォーマンスを改善できるでしょう。

自動パーティショニング

Pandora FMS automatically performs a monthly partitioning in the history database if it is configured from the Web Console, section History database, of the general configuration. For more details check this link.

Pandora FMS は、Web コンソールの一般設定のセクション ヒストリデータベース から設定されている場合、ヒストリデータベースの月次パーティショニングを自動的に実行します。詳細については、こちらを参照してください。

手動パーティショニング

After having installed Pandora FMS and enabled its history database, this will be the one that holds the largest amount of data and it is the recommended one to perform a table partitioning Precisely the tables indicated for that are tagente_datos, tagente_datos_string, tagente_datos_inc and tevento. The manual practical process for the table tagente_datos is described below (see also “Automatic partitioning”).

Pandora FMS をインストールし、ヒストリデータベースを有効にすると、これが最大量のデータを保持するものになります。テーブルパーティション分割の実行が推奨されます。 これに指定されているテーブルは、正確には tagente_datostagente_datos_stringtagente_datos_inc 、および tevento です。テーブル tagente_datos の手動による実際の処理については、以下で説明します (「自動パーティション分割」も参照してください)。

You should check at first that the directory /var/lib/mysql/pandora_history/*.ibd has many files (one per table). If this is not the case, you will need to do a dump of the database, change the configuration of the my.cnf file, restart MySQL, delete the current database and recreate it from the dump.

まず、ディレクトリ /var/lib/mysql/pandora_history/*.ibd に多くのファイル (テーブルごとに 1 つ) があることを確認する必要があります。そうでない場合は、データベースの dump を実行し、my.cnf ファイルの設定を変更し、MySQL を再起動し、現在のデータベースを削除して dump から再作成する必要があります。

Once you ensure that innodb_file_per_table is enabled, separate the two main databases into different partitions.

innodb_file_per_table が有効になっていることを確認したら、2 つのメインデータベースを異なるパーティションに分離します。

This is an example for partitioning all of 2023 so far and for future months. To start the process, you will need to execute the following query in MySQL CLI:

これは、2023 年のこれまでと今後の月全体をパーティション分割する例です。処理を開始するには、MySQL CLI で次のクエリを実行する必要があります。

ALTER TABLE tagente_datos PARTITION BY RANGE (utimestamp) (
PARTITION Jan23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-02-01 00:00:00')),
PARTITION Feb23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-03-01 00:00:00')),
PARTITION Mar23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-04-01 00:00:00')),
PARTITION Apr23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-05-01 00:00:00')),
PARTITION May23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-06-01 00:00:00')),
PARTITION Jun23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-07-01 00:00:00')),
PARTITION Jul23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-08-01 00:00:00')),
PARTITION Aug23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-09-01 00:00:00')),
PARTITION Sep23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-10-01 00:00:00')),
PARTITION Oct23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-11-01 00:00:00')),
PARTITION Nov23 VALUES LESS THAN (UNIX_TIMESTAMP('2023-12-01 00:00:00')),
PARTITION Dec23 VALUES LESS THAN (UNIX_TIMESTAMP('2024-01-01 00:00:00')),
PARTITION pActual VALUES LESS THAN (MAXVALUE)
);

Then the following query would have to be run every month to reorganize the partitioning:

次に、パーティションを再編成するために、次のクエリを毎月実行する必要があります。

ALTER TABLE tagente_datos REORGANIZE PARTITION pActual INTO (
PARTITION Jan24 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01 00:00:00')),
PARTITION pActual VALUES LESS THAN MAXVALUE);

Changing “Jan24” to the month you are in.

“Jan24” を当月に変更します。

Remember again that this operation could take hours, depending on how big the tagente_datos table is. You may check the process by watching the size of the partitioning files by running:

この操作は、tagente_datos テーブルの大きさに応じて、数時間かかる場合があることに再度注意してください。次のコマンドを実行して、パーティションファイルのサイズを監視することで、処理を確認できます。

[root@histdb pandora_history]# ls -lah | grep "#sql"

 -rw-rw----  1 mysql mysql 424M feb 24 05:58 #sql-76b4_3f7c#P#Jan23.ibd
 -rw-rw----  1 mysql mysql 420M feb 24 05:51 #sql-76b4_3f7c#P#Feb23.ibd
 -rw-rw----  1 mysql mysql 128K feb 24 05:40 #sql-76b4_3f7c#P#Mar23.ibd
 -rw-rw----  1 mysql mysql 840M feb 24 05:44 #sql-76b4_3f7c#P#Apr23.ibd
 -rw-rw----  1 mysql mysql 440M feb 24 05:47 #sql-76b4_3f7c#P#May23.ibd
 -rw-rw----  1 mysql mysql  10M feb 24 05:42 #sql-76b4_3f7c#P#Jun23.ibd
 -rw-rw----  1 mysql mysql 404M feb 24 05:56 #sql-76b4_3f7c#P#Jul23.ibd
 -rw-rw----  1 mysql mysql 436M feb 24 05:54 #sql-76b4_3f7c#P#Aug23.ibd
 -rw-rw----  1 mysql mysql 400M feb 24 05:49 #sql-76b4_3f7c#P#Sep23.ibd
 -rw-rw----  1 mysql mysql 408M feb 24 05:52 #sql-76b4_3f7c#P#Oct23.ibd
 -rw-rw----  1 mysql mysql  72M feb 24 06:03 #sql-76b4_3f7c#P#Nov23.ibd
 -rw-rw----  1 mysql mysql 404M feb 24 06:03 #sql-76b4_3f7c#P#Dec23.ibd
 -rw-rw----  1 mysql mysql 416M feb 24 06:00 #sql-76b4_3f7c#P#jan23.ibd

データベースの再構成


To find out more abour Pandora FMS backup and data recovery, go to this link.



Pandora FMS のバックアップとデータ復旧の詳細については、こちら を参照してください。


部分的再構成

MySQL database management system, same as other SQL engines, such as Oracle®, is degraded with time due to causes such as data fragmentation produced by deleting and continuous insertion in large tables. In large environments, with a lot traffic volume, there is a very easy way to improve performance and prevent performance from degrading. This is rebuilding the DB from time to time.

MySQLは他のデータベースシステム、たとえば Oracle® と同様、時間がたつにつれ、性能が劣化していきます。これは大きなテーブルに対してデータの削除と追加を続けることによって発生するデータのフラグメンテーションによるものです。大量のトラフィックが発生する大きな環境において、性能の改善および劣化を防ぐ非常に簡単な方法があります。それは定期的にデータベースの再構築を実施することです。

To that end, schedule a service stop, which could last approximately 1 hour.

そのために、1時間程度のサービス停止を計画すべきです。

In this service stop, stop the Pandora FMS WEB console and the server too. Attention: you may leave the Tentacle server, so that it can still receive data and these will be processed as soon as the server works again.

計画的なサービス停止時に、Pandora FMS Webコンソールとサーバも停止すべきです (注意 tentacle サーバはデータを受け取れるようにしておき、サーバが復旧次第データを処理できるようにします)

Once they have been stopped, dump the DB (Export); in this example, the database is called pandora3 and the user must be root:

停止したら、DB ダンプ (エクスポート) を実行します。この例では、データベースの名前は pandora3 で、ユーザは root です。

mysqldump -u root -p pandora3> /tmp/pandora3.sql

Delete the DB:

データベースを削除します。

mysql -u root -p
DROP DATABASE pandora3;
 Query OK, 87 ROWS affected (1 MIN 34.37 sec)

Create the DB and import the previous data export from the dump you did at first:

データベースを作成し、先ほどエクスポートしたデータをインポートします。

CREATE DATABASE pandora3;
USE pandora3;
SOURCE /tmp/pandora3.sql

This may take a few seconds or several minutes, depending on the size of the database and the resources available on the machine.

データベースのサイズとマシンで使用可能なリソースに応じて、数秒から数分かかる場合があります。

It is possible to automatize this process, but, because it is very delicate, the best option is to make it manually.

この処理を自動化することは可能ですが、非常にデリケートなため、手動で実行するのが最善のオプションです。

全体の再構築

This section affects only InnoDB databases. Pandora FMS is built on Innodb databases.

この節の説明は、Innodb データベースのみ該当します。Pandora FMS は、Innodb データベースを利用しています。

Unfortunately, MySQL is degraded with time, and this affects the global performance of the system.There is no other solution that does not involve rebuilding all the database schemes from scratch, rebuilding the data binary file that MySQL uses to store all the information and the files used to rebuild the transactions.

時間ともに MySQL のパフォーマンスが落ちると、システム全体のパフォーマンスに影響します。この場合は、すべてのデータベーススキーマをゼロから再構築する以外に解決策はありません。MySQL がデータの保存に利用しているバイナリファイルを利用し、またそれを再構築します。

If you take a look at the /var/lib/mysql directory, you may see that there are three files, that have always the same name, and that are, depending on the severity of the case, huge. In this example:

/var/lib/mysql ディレクトリを見ると、常に同じ名前を持ち、状態に応じて非常に大きなサイズのファイルが 3 つあることがわかります。この例では、次のようになります。

 -rw-rw----  1 mysql mysql 4.8G 2012-01-12 14:00 ibdata1
 -rw-rw----  1 mysql mysql 5.0M 2012-01-12 14:00 ib_logfile0
 -rw-rw----  1 mysql mysql 5.0M 2012-01-12 14:00 ib_logfile1

The ibdata1 file is the one that stores all the system Innobd data. In a very fragmented system that has not been “rebuilt” or “installed” for a long time, this system will be big but little efficient. The innodb_file_per_table parameter, that was mentioned before, regulates part of this performance.

ibdata1 ファイルは、すべてのシステム Innobd データを保存するファイルです。長い間「再構築」または「インストール」されていない非常に断片化されたシステムでは、これは大きくなり効率は下がります。前に説明した innodb_file_per_table パラメータは、このパフォーマンスの一部を制御します。

Similarly, each database has in the /var/lib/mysql directory, one directory to define its structure. Delete them too.

同様に、各データベースは /var/lib/mysql ディレクトリ 内に、その構造を定義する 1 つのディレクトリがあります。これらも削除します。

The process is quite easy:

手順はとても簡単です。

  1. Dump (via mysqldump) all the schemes to the disk:
  1. すべてのスキーマをディスクにダンプします (mysqldump 経由)。
mysqldump -u root -p -A> alldata.sql
mysql -u root -p
CREATE DATABASE pandora;
USE pandora;
SOURCE alldata.sql;

The system should work faster now.

システムの動作が高速化されるはずです。

オプションのインデックス

There are some situations when you can optimize MySQL performance, but giving up other system resources.

他のシステムリソースを犠牲にして、MySQL パフォーマンスを最適化できるいくつかの場合があります。

This index optimizes speed on graph rendering (a lot), but it uses more disk storage space, and could entail a slightly decrease on INSERT/DELETE operation, due to the Index overhead:

以下のインデックスの最適化はグラフ生成を(とても)高速化しますが、多くのディスクスペースを必要とします。また、インデックスのオーバーヘッドにより、若干 INSERT/DELETE 処理が遅くなります。

ALTER TABLE `pandora`.`tagente_datos` ADD INDEX `id_agente_modulo_utimestamp` (`id_agente_modulo`,`utimestamp`);

At the moment, in the heaviest tables of Pandora FMS in MySQL, this optimization is there by default. It is advisable to have expert help to optimize MySQL tables.

現在、MySQL の Pandora FMS の最も重いテーブルでは、この最適化がデフォルトになっています。MySQL テーブルを最適化する前に専門家に相談するのが良いです。

スロウクエリ

In some systems, depending on the type of information you have, you may find some “slow queries” that make the system work worse. You may enable logs of this type of queries over a short period of time (since it harms the system performance) in order to consider trying to optimize queries to tables with indexes. To enable these settings, do the following:

いくつかのシステムでは保持している情報によって、通常よりもシステムのパフォーマンスが悪いスロウクエリが見られることがあります。テーブルを最適化するために、(システムのパフォーマンスに影響する)一定時間を超えたこのタイプのクエリをログに記録するようにできます。これを有効にするには次のようにします。

slow_query_log=1
long_query_time=2
slow_query_log_file=/var/log/mysql_slow.log
touch /var/log/mysql_slow.log
chown mysql:mysql /var/log/mysql_slow.log
chmod 640 /var/log/mysql_slow.log

参考サイト

Pandora FMS のキャパシティ計測

This section describes different methods to configure Pandora FMS in a high capacity environment. It also describes different tools to make load tests, which are useful to adjust the environment to the highest possible process capacity.

この章では、高いキャパシティが必要な環境での Pandora FMS を設定するための異なる手法を説明します。また、処理を実行する環境を調整するのに便利な負荷テストを行うためのツールについても説明します。

Pandora FMS has been configured to support a load of around 2500 agents in systems where database, console and server are in the same machine. The maximum recommended number is around 2500 agents (about 60,000 modules) per system, but this number varies greatly depending on whether they are XML agents, remote modules, with high or low intervals, or with systems with high capacity or low memory.

Pandora FMS は、1つのサーバでデータベース、コンソール、サーバを動かした場合、2500エージェントに対応できるように設定されています。推奨するエージェント数は、1システムあたり 2500 です。しかし、この数は、XML エージェントの割合、リモートモジュールの割合、監視間隔、システムのメモリ量に応じて変化します。

All factors greatly alter the number of agents that a system can manage efficiently. In laboratory tests, 10,000 agents have been executed in a single server with basic hardware, but strongly optimized.

これらの全ての要素が、1つのシステムで管理できるエージェント数に関わります。テスト環境では、通常のハードウエアの 1台のサーバで 10000 エージェントを実行できましたが、高度な最適化をしています。

高キャパシティサーバの設定例

Assuming a RHEL 8 machine with 16 GB of RAM and 8 CPU to be optimized for the maximum processing capacity of the Dataserver (XML).

例えば、16GB の RAM および 8 CPU の RHEL 8 マシンで、データサーバが最大のパフォーマンス (XML 処理) を出すように最適化したいと思います。

my.cnf

Only the most important parameters are shown.

重要なパラメータのみを示しています。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8mb4
skip-character-set-client-handshake
# Disabling symbolic-links is recommended to prevent assorted    security risks
symbolic-links=0
# MySQL optimizations for Pandora FMS
# Please check the documentation in http://pandorafms.com for  better results
max_allowed_packet = 64M
innodb_buffer_pool_size = 6400M
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 300
thread_cache_size = 8
thread_stack    = 256K
max_connections = 100
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=1M
join_buffer_size=4M
sql_mode=""

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

pandora_server.conf

Only the most relevant parameters are shown.

重要なパラメータのみを示しています。

verbose 3
server_threshold 5
xxxxserver_threads 8
max_queue_files 5000

Aspects to take into account:

以下の点を認識しておく必要があります。

キャパシティ分析ツール (Capacity)

Pandora FMS has several tools that may help you to measure properly its hardware and software for the amount of data it expects to obtain. One of them is useful to “attack” directly the database with fictitious data (dbstress) and the other generates fictitious XML files (xml_stress).

Pandora FMS には、ハードウエアおよびソフトウエアで、取得可能なデータ量を適切に計測できるいくつかのツールがあります。一つは、ダミーデータで直接データベースへアクセスするもの (dbstress)、もう一つは、ダミーの XML ファイルを生成するもの (xml_stress) です。

Pandora FMS の XML 負荷

This is an small script that generates XML data files like the ones sent by Pandora FMS agents. By default it is placed on:

Pandora FMS エージェントから送られるような XML データファイルを生成する小さなスクリプトです。デフォルトでは以下にあります。

/usr/share/pandora_server/util/pandora_xml_stress.pl

The scripts read agent names from a text file and generate XML data files for each agent according to a configuration file, where modules are defined as templates.

スクリプトは、テキストファイルからエージェント名を読み取り、設定ファイルに従って各エージェントの XML データファイルを生成します。ここで、モジュールはテンプレートとして定義されています。

Modules are filled with random data. An initial value and the probability of the module data changing may be specified.

モジュールの値はランダムな値になります。モジュールデータの初期値および変化率は設定可能です。

Run the script like this:

スクリプトは次のように実行します。

./pandora_xml_stress.pl <設定ファイル>

Sample < configuration file > called pandora_xml_stress.conf:

pandora_xml_stress.conf という < 設定ファイル > に指定するファイルの例を示します。

# Maximum number of threads, by default 10.
max_threads 10

# File containing a list of agent names (one per line).
agent_file agent_names.txt

# Directory where XML data files will be placed, by default /tmp.
temporal /var/spool/pandora/data_in

# Pandora FMS XML Stress log file, logs to stdout by default.
log_file pandora_xml_stress.log

# XML version, by default 1.0.
xml_version 1.0

# XML encoding, by default ISO-8859-1.
encoding ISO-8859-1

# Operating system (shared by all agents), by default Linux.
os_name Linux

# Operating system version (shared by all agents), by default 2.6.
os_version 2.6

# Agent interval, by default 300.
agent_interval 300

# Data file generation start date, by default now.
time_from 2009-06-01 00:00:00

# Data file generation end date, by default now.
time_to 2009-06-05 00:00:00

# Delay after generating the first data file for each agent to avoid
# race conditions when auto-creating the agent, by default 2.
startup_delay 2

# Address of the Tentacle server where XML files will be sent (optional).
# server_ip 192.168.50.1

# Port of the Tentacle server, by default 41121.
# server_port 41121

# Module definitions. Similar to pandora_agent.conf.

module_begin
module_name Module 1
module_type generic_data
module_description A long description.
module_max 100
module_min 10
module_exec type=RANDOM;variation=60;min=20;max=80
module_end

module_begin
module_name Module 2
module_type generic_data
module_description A long description.
module_max 80
module_min 20
module_exec type=SCATTER;prob=1;avg=40;min=0;max=80
module_end

module_begin
module_name Module 3
module_type generic_data
module_description A long description.
module_max 80
module_min 20
module_exec type=CURVE;min=20;max=80;time_wave_length=3600;time_offset=0
module_end

module_begin
module_name Module 4
module_type generic_data_string
module_description A long description.
module_max 100
module_min 10
module_exec type=RANDOM;variation=60;min=20;max=80
module_end

module_begin
module_name Module_5
module_type generic_proc
module_descripcion Module 3 description.
# Initial data.
module_data 1
module_end

Send and Receive Agent Local Configuration

エージェントのローカル設定の送受信

If you activate in your pandora_xml_stress.conf the get_and_send_agent_conf configuration value to 1, you may make the test load agents work as normal agents, so that they send their configuration file and also the MD5 hash. From PFMS Web Console you may modify the remote configuration for subsequent runs of pandora_xml_stress.

pandora_xml_stress.conf で、get_and_send_agent_conf を 1 に設定して実行した場合、テスト負荷エージェントで、通常のエージェントのように設定ファイルおよび md5 を送ることができます。PFMS Web コンソールから、pandora_xml_stress の以降の実行のリモート設定を変更できます。

Besides this, you may configure where to store locally the .conf files of your testing agents with the directory_confs configuration token in the pandora_xml_stress.conf file.

ほかにも、pandora_xml_stress.conf 内の directory_confs にて、テストエージェントの設定ファイル .conf をどこに保存するかを設定できます。

Configuration File

設定ファイル

The definition of one module in the script configuration file. If remote configuration was enabled, it will also be the same. It is:

スクリプト設定ファイル内の 1 つのモジュールの定義。リモート設定が有効になっている場合も同様です。次のようになります。

module_begin
module_name <module_name>
module_type <module_type_data>
module_description <description>
module_exec type =<xml_stress_type_generation>;<another_option>;<another_option> …
module_unit <units>
module_min_critical <value>
module_max_critical <value>
module_min_warning <value>
module_max_warning <value>
module_end
module_begin
module_name <モジュール名>
module_type <タイプ, 例: generic_data>
module_description <説明>
module_exec type=<type_generation_xml_stress>;<; 区切りの他のオプション>
module_unit <ユニット>
module_min_critical <値>
module_max_critical <値>
module_min_warning <値>
module_max_warning <値>
module_end

Each one can be configured as:

それぞれの項目は次のように設定可能です。

module_begin
module_name Network Traffic
module_type generic_data
module_description Incoming network traffic (Kbit/s)
module_exec type=RANDOM;variation=50;min=0;max=1000000
module_unit Kbit/s
module_min_critical 900000
module_attenuation 0.5
module_attenuation_wdays 0 6
module_end

RANDOM

次のオプションがあります。

Numeric

minmax の間の数値をランダムに生成します。

Booleans

0 または 1 の値を生成します。

String

minmax の間の長さの文字列を生成します。文字は、A から Z の間のランダムで、大文字、小文字を含み、また数字や記号を含みます。

外部データソース (SOURCE)

データのソースとしてプレーンテキストファイルを利用することができます。次のオプションがあります。

ファイルは、1行に1データを含む形式で、行数に制限はありません。例えば次の通りです。

4
5
6
10

二種類のデータ(数値と文字列)を扱うことができます。これらのモジュールは、ファイルのデータ順番に読み込んで、Pandora でのモジュールデータを生成します。上記のデータの例では、次のように表示されます。

4 5 6 10 4 5 6 10 4 5 6 10 4 5 6 10 4 5 6 10 4 5 6 10

SCATTER

数値データの場合のみ有用で、ハートビートのようなグラフを生成します。これは通常の値で、ある時間に “beat” を出します。

次のオプションがあります。

CURVE

三角関数を使った曲線でモジュールデータを生成します。 次のオプションがあります。

Note: This tool is preconfigured to look for, in all agents, “random”, “curve” or boolean name modules that use an interval between 300 seconds and 30 days.

注意事項: このツールは、すべてのエージェントで、300秒から 30日の間隔を使用する “random”、“curve”、またはブール名のモジュールを検索するように事前設定されています。

データサーバの処理能力の計測方法

There is a small script called pandora_count.sh that is found in the /usr/share/pandora_server/util/ directory in Pandora FMS server directory. This script is used to measure the processing rate of XML files by the data server, and it uses as reference all the files yet to be processed at /var/spool/pandora/data_in, so to be able to use it, thousands of packages yet to be processed are needed (or they must be generated with the tool mentioned before). Once running, you may stop it pressing the keys CTRL+C.

pandora_count.sh というスクリプトが Pandora FMS サーバパッケージの /usr/share/pandora_server/util/ ディレクトリにあります。このスクリプトは、データサーバの XML ファイル処理率を計測するのに利用します。このツールは、/var/spool/pandora/data_in に残っているファイルを利用します。そのため、未処理の数千のファイルを用意しておく (もしくは前述のツールで生成しておく) 必要があります。実行後は、CTRL+C で停止できます。

This script takes into account only the packages currently existing, and it take them away from the packages existing 10 seconds ago, then divides the result by 10, and these will be the files that have been processed in the last 10 seconds, showing the rate per second. It is a rudimentary solution but it is helpful to fix the server configuration.

このスクリプトは、現在存在するファイルをカウントし、10秒前に処理したものを除外し、結果を 10 で割ることによって、1秒間の処理率を求めています。これは初歩的なソリューションですが、サーバの設定を修正するための情報を提供します。

Pandora FMS の DB 負荷

データベースパフォーマンスを確認するためのツールがあります。これはまた、架空のデータを定期的もしくは不定期に生成するためにも利用できます。エージェントを作成し、このツールを使って自動的にデータを挿入するためのモジュールを作成しておく必要があります。

random, curve および boolean という語を含む任意の名前を使うことができます。

data_server モジュールのみ選択することができます。

Pandora FMS DB Stress Fine Adjustment

Pandora FMS の DB 負荷 ツールの調整

This tool is preconfigured in order to search, in all agents, the module names “random”, “curve” or “boolean”, that use an interval between 300 seconds and 30 days.

このツールは、すべてのエージェントから、randomcurve または boolean という名前がついかモジュールを検索するようにあらかじめ設定されています。また、実行間隔は 300秒から 30日の間を指定できます。

もしこの設定を変更したい場合は、pandora_dbstress スクリプトを編集し、ファイルの先頭にあるいくつかの変数を変更する必要があります。

# Configure here target (AGENT_ID for Stress)
my $target_module = -1; # -1 for all modules of that agent
my $target_agent = -1;
my $target_interval = 300;
my $target_days = 30;
  1. The first line of the variable corresponding with target_module should be fixed for a fix module or -1 to process all the matching targets.
  2. The second line of variable must match target_agent, for a specific agent.
  3. The third line must match target_interval, defined in seconds and which represents the module predefined periodical interval.
  4. The fourth line is target_days and represents the number of days in the past since the date, in the current timestamp.
  1. 最初の行の target_module の設定では、対象のモジュールを指定するか -1 を指定すると全てが対象になります。
  2. 2行目の target_agent は、エージェントの指定です。
  3. 3行目の target_interval は、秒単位で実行間隔を指定します。
  4. 4行目の target_days は、現在日時から何日後までかを表します。

Pandora FMS の診断ツール

Sometimes, there are problems for which direct help from Pandora FMS support is needed. To fmake the communication with the Support team easier, Pandora FMS servers have some tools for this.

場合によっては、Pandora FMS サポートからの直接的な支援が必要な問題が発生することがあります。サポートチームとのコミュニケーションを容易にするために、Pandora FMS サーバーにはそのためのツールがいくつかあります。

診断情報

This tool is located in the Management → Admin tools → Diagnostic Info section, and is conceived to provide the most important information about Pandora FMS configuration and its database.

このツールは 管理(Management) → 管理ツール(Admin tools) → 診断情報(Diagnostic Info) セクションにあり、Pandora FMS の設定とデータベースに関する最も重要な情報を提供するように設計されています。

Pandora FMS ドキュメント一覧に戻る

(OBSOLETE)

pandora_diagnostic.sh

/usr/share/pandora_server/util にあるツールで、システムの多くの情報を取得します。

すべての情報は、.txt ファイル内に生成されるので、この情報を手助けしてくれる人に送信することができます。たとえば、Pandora FMS ユーザフォーラムや Pandora FMS public メーリングリストなどです。この情報には、機密情報は含まれません。pandora_server.conf および my.cnf ファイルの内容を取得したい場合は、root 権限で実行する必要があることに注意してください。

以下に実行例を示します。

$ ./pandora_diagnostic.sh 
 
Pandora FMS Diagnostic Script v1.0 (c) ArticaST 2009
http://pandorafms.org. This script is licensed under GPL2 terms
 
Please wait while this script is collecting data
  
Output file with all information is in '/tmp/pandora_diag.20090601_164511.data'

また、出力ファイルの例を示します。

Information gathered at 20090601_164511
Linux raz0r 2.6.28-12-generic #43-Ubuntu SMP Fri May 1 19:27:06 UTC 2009 i686 GNU/Linux
=========================================================================
-----------------------------------------------------------------
CPUINFO
-----------------------------------------------------------------
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
.
.
-----------------------------------------------------------------
Other System Parameters
-----------------------------------------------------------------
Uptime:  16:45:11 up  5:27,  2 users,  load average: 0.11, 0.12, 0.09
-----------------------------------------------------------------
PROC INFO (Pandora)
-----------------------------------------------------------------
slerena  11875  0.9  2.1 114436 44336 pts/0    Sl   13:14   1:56 gedit pandora_diagnostic.sh
slerena  24357  0.0  0.0   4452  1524 pts/0    S+   16:45   0:00 /bin/bash ./pandora_diagnostic.sh
-----------------------------------------------------------------
MySQL Configuration file
-----------------------------------------------------------------
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
.
.
.
-----------------------------------------------------------------
Pandora FMS Logfiles information
-----------------------------------------------------------------
total 3032
drwxr-xrwx  2 root    root       4096 2009-04-30 20:00 .
drwxr-xr-x 17 root    root       4096 2009-06-01 11:24 ..
-rw-r-----  1 root    sys      377322 2009-04-06 00:12 pandora_agent.log
-rw-r--r--  1 root    root          0 2009-04-06 00:15 pandora_agent.log.err
-rw-r--r--  1 root    root      13945 2009-04-02 21:47 pandora_alert.log
-rw-r--r--  1 slerena slerena 2595426 2009-04-30 20:02 pandora_server.error
-rw-rw-rw-  1 root    root       9898 2009-04-30 20:02 pandora_server.log
-rw-rw-rw-  1 root    root      65542 2009-04-30 20:00 pandora_server.log.old
-rw-r--r--  1 root    root         94 2009-04-06 00:19 pandora_snmptrap.log
-rw-rw-rw-  1 root    root          4 2009-04-03 14:16 pandora_snmptrap.log.index
-----------------------------------------------------------------
System disk
-----------------------------------------------------------------
S.ficheros            Tamaño Usado  Disp Uso% Montado en
/dev/sda6              91G   49G   37G  58% /
tmpfs                1003M     0 1003M   0% /lib/init/rw
varrun               1003M  260K 1002M   1% /var/run
varlock              1003M     0 1003M   0% /var/lock
udev                 1003M  184K 1002M   1% /dev
tmpfs                1003M  480K 1002M   1% /dev/shm
lrm                  1003M  2,4M 1000M   1% /lib/modules/2.6.28-12-generic/volatile
-----------------------------------------------------------------
Vmstat (5 execs)
-----------------------------------------------------------------
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 2  0      0 684840 119888 619624    0    0    15    10  258  474  3  1 95  0
 0  0      0 684768 119888 619640    0    0     0     0  265  391  0  0 100  0
 0  0      0 684768 119892 619636    0    0     0    56  249  325  1  1 99  0
 0  0      0 684768 119892 619640    0    0     0     0  329  580  0  0 100  0
 0  0      0 684776 119892 619640    0    0     0     0  385 1382  1  0 99  0
-----------------------------------------------------------------
System dmesg
-----------------------------------------------------------------
[    0.000000] BIOS EBDA/lowmem at: 0009f000/0009f000
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.28-12-generic (buildd@rothera) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) )   #43-Ubuntu SMP Fri May 1 
19:27:06 UTC 2009 (Ubuntu 2.6.28-12.43-generic)
.
.
-----------------------------------------------------------------
END OF FILE
-----------------------------------------------------------------
560e8fa02818916d4abb59bb50d91f6a  /tmp/pandora_diag.20090601_164511.data