コンテンツにスキップ

ユーザーが独自のルールファイルとライブラリをカスタマイズする


  • バージョン: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.d10001-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 は、ユーザーがカスタマイズしたルール名もこの規則に従うことを推奨します。

  1. マニフェストファイルを作成する ユーザーディレクトリ custom.rules.d10001-hostname.manifest という名前のファイルを作成します。内容は以下の通りです。
id="10001-hostname"
category="system"
level="info"
title="ホスト名が変更されました"
desc="ホスト名が変更されました: {{.Content}}"
cron="0 */1 * * *"
# スイッチ
disabled=false
os_arch=["Linux"]

現在のルールマニフェストファイルの設定は、1分ごとに実行するものです。

  1. サーバーを再起動する
systemctl restart scheck.service
  1. メッセージを送信する

サーバー再起動後、1分ごとにスクリプトが実行されます。1分後にホスト名を変更します。

静的ホスト名は /etc/hostname ファイルに保存されています。コマンドで変更できます。

   hostnamectl set-hostname  myclient1
  1. 確認する

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

cron="* */1 * * *"  # 毎分実行
cron="* * */1 * *"  # 毎時実行
cron="* * * */1 *"  # 毎日実行

常駐ルール

cron="disable" または cron=""  

常駐ルールは常に実行され、トリガーがあった場合に1秒以内にメッセージを報告します。例:ファイルの変更など。

フィードバック

このページは役に立ちましたか?