Puppetで管理されているネットワーク全体の検出を自動化しようとしていますが、複数の理由から、Puppetdbの代わりにzabbixネットワーク検出機能を使用したいと考えています。
すべてのクラスをコンマ区切りの値として返すpuppet.classesという名前のユーザーパラメーターを作成しようとしました(例:、Apache、mysql、zabbix、)。これは、検出ルールのチェックと呼ばれます。
次に、アクションで「、Apacheのような受信値」、「テンプレートへのリンク:Apache」を設定します。 スクリーンショット
Puppetクラスが少ないだけですべて問題ありませんが、テスト環境のデータベースでは値が切り捨てられます。
[zabbix]> select dserviceid,dhostid,status,lastup,lastdown,value,dns from dservices where dcheckid=3 and type=9 and key_='puppet.classes' \G
*************************** 1. row ***************************
dserviceid: 9
dhostid: 3
status: 0
lastup: 1464103581
lastdown: 0
value: ,Apache,apache::default_confd_files,Apache::default_mods,Apache::mod::alias,Apache::mod::dir,Apache::mod::filter,Apache::mod::mime,Apache::mod::php,Apache::mod::prefork,Apache::mod::ssl,Apache::mod::status,Apache::params,Apache::service,Apache::version,ap
dns:
かなり多くのデバッグを行った後、私はついに発見チェックが255バイトを超えることはできないことを発見しました
src/libs/zbxdbhigh/discovery.c
static void discovery_update_dservice(zbx_uint64_t dserviceid, int status, int lastup, int lastdown, const char *value)
{
char *value_esc;
value_esc = DBdyn_escape_string_len(value, DSERVICE_VALUE_LEN);
DBexecute("update dservices set status=%d,lastup=%d,lastdown=%d,value='%s' where dserviceid=" ZBX_FS_UI64, status, lastup, lastdown, value_esc, dserviceid);
zbx_free(value_esc);
}
include/db.h
#define DSERVICE_VALUE_LEN 255`
自動登録でメタデータを使用すると、同じ制限があります。
### Option: HostMetadata
# Optional parameter that defines Host metadata.
# Host metadata is used at Host auto-registration process.
# An agent will issue an error and not start if the value is over limit of 255 characters.
# If not defined, value will be acquired from HostMetadataItem.
#
# Mandatory: no
# Range: 0-255 characters
# Default:
# HostMetadata=
APIを使用して、これを自分で行うスクリプトを作成することもできますが、これは非常に大きなプロジェクトであり、これを実行しているプロジェクトは実際には見つかりませんでした。あればよろしくお願いします。
また、検出ルールで複数の検出チェックを作成できることはわかっていますが、検出で40以上のチェックが発生するため、新しいテンプレートを作成するたびに手動で追加する必要があります...次のようなソリューションが必要です。新しいテンプレートを追加するための操作は可能な限り少なくなります。
誰かがこの問題にぶつかり、スケーラブルなソリューションを手に入れましたか?
Zabbix3.0.3を使用しています
最も柔軟で強力なアプローチは、Zabbix APIを使用してホストを作成し、それらをPuppetの適切なテンプレートにリンクすることです。
それを処理する1つのプロジェクトは https://github.com/voxpupuli/puppet-zabbix#module-description であり、Zabbix3.0ですでにテストされているようです。 https://github.com/purplehazech/puppet-zabbix など他にもあります。
自分で試して、ニーズに最適なものを確認する必要があります。
Zabbix ネットワーク検出 についてはすでにご存知ですが、255文字の制限があるためあまり役に立ちません。 「Apache :: default_confd_files」のようなフルネームの代わりに短いコードを使用することもできますが、それを維持するのは難しいかもしれず、おそらく制限に達する可能性があります。
アクティブエージェントの自動登録 の長さの制限は同じであるため、それほど違いはありません。
ハックの回避策として、ネットワーク検出または自動登録でホストを作成し、スクリプトを開始するだけで、zabbix_getを使用してホストが持つすべての役割を持つアイテムキーをクエリし、APIを使用してホストをテンプレートにリンクすることができます。 。