0

私のアプリケーションはsyslog-ngにメッセージを書き込んでおり、syslog-ngは着信メッセージを異なる列に分けることでこのメッセージをSQliteに保存しています。

私のアプリケーション ログの凡例は次のようになります。

unique-record-id usename date    Quantity    BOQ  comma,separated,profiles  Count   Vendor  applicable,vendor,categories    known,request,types vendor_code credit

上記のメッセージには 12 個の値があり、それらはタブ (\t) で区切られています。これらの 12 個の値には、カンマ区切りの文字列を持つものがあります。これらのカンマ区切りの値はログ行ごとに異なる場合があり、4 列になることもあれば 2 列になることもありますが、テーブル内のカンマ区切り値の位置が固定されている場合は、6 列目、9 列目、10 列目などです。

サンプルログ行:

140189 "john@192.168.0.22" "03/Mar/2015:10:05:01" 1593 89 "apple,mango,banana" 15 "google" "fruits,games,social,business" "check,block" 123 50

次のパーサーを使用して、そのメッセージを SQLite テーブル (TABLE1) に解析できます。

parser p_tab_space {
    csv-parser(columns("LOG.ID", "LOG.USERNAME", "LOG.DATE",
        "LOG.QUANTITY", "LOG.BOQ", "LOG.PROFILES",
        "LOG.COUNT", "LOG.VENDOR", "LOG.CATEGORIES",
        "LOG.REQUESTS", "LOG.CODE","LOG.CREDIT")
         delimiters("\t")
         );
};

ここで、 LOG.PROFILES を別のテーブル (PROFILE_TABLE)に再度解析する必要があります。

id | profiles | quantity
1  | apple    | 1593 
2  | mango    | 1593 
3  | banana   | 1593 

同じように、別のテーブル(CATEGORY_TABLE、REQ_TABLE)の残りのカンマ区切りの値に対してこれを行う必要があります。

例 :

  id | categories | quantity
  1  | fruits     | 1593 
  2  | games      | 1593  
  3  | social     | 1593 
  4  | business   | 1593 

ここでの問題は、カンマで区切られた値の数がわからないことです。

メインの入力メッセージは 12 個のタブで区切られた値で構成されていることがわかっているため、p_tab_space パーサーで 12 個の列 (MACROS) を作成しました。しかし、カンマ区切りのリストを解析している間、いくつの値が来るかわかりませんか? したがって、マクロを作成することはできません。

このリンクをたどりましたが、助けにはなりません。

あなたの誰かがいくつかのアイデアを投げることができれば、それはとても助けになるでしょう.

前もって感謝します!

4

1 に答える 1

1

このためには、syslog-ng の最新バージョン (少なくとも 3.7) が必要です。このバージョンでは、Python でカスタム テンプレート関数を記述して、ログ メッセージの関連するコンマ区切り部分を分割し、SQL の宛先で使用できる動的な値ごとにマクロを作成する必要があります。新しいマクロを作成するには、log_message["new-macro-name"]="value" 形式を使用できます (ご覧のとおり、これはリンクされたドキュメントにはまだ記載されていません。できればすぐに更新します)。

于 2016-03-07T11:54:38.843 に答える