ユーザーが独自のルールファイルとライブラリをカスタマイズする¶
- バージョン:1.0.7-7-g251eead
- リリース日:2023-04-06 11:17:57
- 対応OS:windows/amd64,windows/386,linux/arm,linux/arm64,linux/386,linux/amd64
Scheck ルールの紹介¶
Lua ルールの紹介:
ルールスクリプトは Lua ファイルとマニフェストファイルの2つのファイルで構成されます。この2つのファイルは必ず同時に存在し、かつファイル名のプレフィックスが同じである必要があります。
-
<rule-name>.lua:これはルールの判断スクリプトです。Lua 構文に基づいて実装されていますが、標準の Lua ライブラリを参照したり使用したりすることはできません。組み込みの Lua ライブラリと組み込み関数のみを使用できます。 -
<rule-name>.manifest:これはルールマニフェストファイルです。対応する Lua スクリプトが問題を検出した場合(result == true)、マニフェストファイルには対応する一連の動作定義があります。
マニフェストファイルのフィールド説明¶
| manifest フィールド | フィールド説明 | 設定説明 |
|---|---|---|
| id | 名称 | ID ルールに従い、スクリプトの機能に基づいて命名 |
| category | system | 複数の種類を使用可能:system,os,net,file,db,docker... |
| level | アラートレベル | 選択可能な種類:debug,info,warn,error |
| title | ルールの見出し名 | 通常、ルールの機能に基づいて命名 |
| desc | 説明 | テキストでルールの実行結果を表示・説明 |
| cron | カスタム実行間隔 | 参考:cron 記述例 |
| disabled | スイッチ | オプションフィールド:true または false |
| os_arch | 対応OS | 配列型 選択可能:"windows" "linux" |
Scheck の組み込みルールはインストールディレクトリの rules.d にあります。
ユーザーが独自のルールと Lua ライブラリをカスタマイズする¶
この例では、ホスト名を定期的に確認するルールを用いて説明します。
1. Lua ファイルを作成する
ユーザーディレクトリ custom.rules.d に 10001-hostname.lua という名前のファイルを作成します。コードは以下の通りです。
local function check()
local cache_key = "hostname"
local old = get_cache(cache_key) --get_cache(key) は Go 組み込み関数。Lua スクリプトキャッシュ用。set_cache(cache_key, current) と組み合わせて使用
if old == nil then
local current = hostname() -- Go 組み込み関数 ホスト名を取得
set_cache(cache_key, current)
return
end
local current = hostname()
if old ~= current then
trigger({Content=current}) -- Go 組み込み関数 メッセージを Datakit またはローカルログに送信
set_cache(cache_key, current)
end
end
check()
注意:Scheck は、ユーザーがカスタマイズしたルール名もこの規則に従うことを推奨します。
- マニフェストファイルを作成する
ユーザーディレクトリ
custom.rules.dに10001-hostname.manifestという名前のファイルを作成します。内容は以下の通りです。
id="10001-hostname"
category="system"
level="info"
title="ホスト名が変更されました"
desc="ホスト名が変更されました: {{.Content}}"
cron="0 */1 * * *"
# スイッチ
disabled=false
os_arch=["Linux"]
現在のルールマニフェストファイルの設定は、1分ごとに実行するものです。
- サーバーを再起動する
- メッセージを送信する
サーバー再起動後、1分ごとにスクリプトが実行されます。1分後にホスト名を変更します。
静的ホスト名は /etc/hostname ファイルに保存されています。コマンドで変更できます。
- 確認する
Guance コンソールにログイン → ナビゲーションバー → セキュリティチェック:インストールされたチェック情報を確認します。ホスト名が変更されたというメッセージが1件表示されます。
ルールライブラリ¶
Lua ライブラリファイルとユーザー定義ライブラリ:
Scheck に付属の Lua 参照ライブラリファイルはインストールディレクトリの rules.d/libs にあります。関数一覧とインターフェースドキュメントはオンラインで確認できます。
lib ライブラリファイルにはマニフェストファイルは必要ありません。Lua で参照するには、一度宣言する必要があります。例えば、libs 内の directorymonitor を参照するには、次のように宣言します。
local directorymonitor = require("directorymonitor")
local function check()
directorymonitor.add("/usr/bin")
end
check()
注意:ユーザーは Scheck に付属の lib ライブラリおよび Lua ルールファイルを変更することはできません。インストールの更新やサービスの再起動のたびに、ルールファイルは上書きされます。
ユーザーがカスタマイズしたルールとライブラリファイルは custom.rules.d ディレクトリに配置できます。カスタム Lua 参照ライブラリファイルがある場合は、custom.rules.d/libs ディレクトリに配置できます。
別のパスを指定する場合は、設定ファイル scheck.conf を変更するだけです。
[system]
# ##(必須) システムがチェックスクリプトを格納するディレクトリ
rule_dir = "/usr/local/scheck/rules.d"
# ##ユーザーカスタムディレクトリ
custom_dir = "/usr/local/scheck/custom.rules.d"
# オプション ユーザーカスタム Lua ライブラリ。rule_dir は使用不可。システムデフォルトはユーザーディレクトリ下の libs
custom_rule_lib_dir = "/usr/local/scheck/custom.rules.d/libs"
付録¶
Lua ルール命名規則¶
Scheck に付属の Lua ルールはタイプごとに命名されています。名前の前の ID は、特定のルールタイプに属することを示します。
ユーザールール名は数字で始まり、かつ10000未満であってはなりません。例:10001-xxx.lua
Scheck に付属のルール命名規則:
| ID範囲 | ルールタイプ |
|---|---|
| 0000 | システムキャッシュ |
| 0001~0199 | system |
| 0200~0299 | ネットワーク |
| 0300~0310 | コンテナ関連 |
| 0500~0510 | データベース |
| 10000以上 | ユーザー定義 |
ユーザー定義の Lua が命名規則に従って命名されていない場合、ルールの読み込みに失敗する可能性があります。
マニフェストファイルの cron フィールド設定¶
Scheck は2つの実行方式をサポートしています:間隔実行と常駐タイプです。現在、固定時刻実行はサポートしていません。
間隔実行 cron¶
常駐ルール¶
常駐ルールは常に実行され、トリガーがあった場合に1秒以内にメッセージを報告します。例:ファイルの変更など。
