ElasticsearchでのNetScaler LOGの収集とGrafanaでの視覚化

今日はかなり興味深いメニューがあります, また、インフラストラクチャでNetScalerを担当している場合, この投稿では、ログを収集して後で処理し、最終的にGrafanaでダッシュボードを作成してリアルタイムで表示する方法を見ていきます (または歴史的な) 収集されたデータ.

 

だから私が言ったこと, Citrix NetScalerでログをLogstashに送信して処理し、さまざまなログの行を構造化データに分割することができます. この情報をElasticsearchインデックスに保存し、次にコネクタまたは「データソース」に保存します’ Grafanaのこのデータにアクセスできるようになります, それらをリアルタイムまたは一定期間で表示するために (過去24時間, 月…). そして、誰もが自分のNSが果たす役割に基づいてダッシュボードを作ることができます, Gateway サービスがアクセスするパブリック IP を認識している場合, 交通… 宛先に加えて、コンテンツスイッチングの同上がある場合… ロードバランシングがある場合は、接続がどこに行くのかを実際に分析します…  最終的には、ログに保存されているすべてのものが悪用される可能性があり、NetScalerは内部で何が起こっているかを知るための非常に興味深いデバイスです, 認証の表示など, 正しいか間違っているか.

 

まず、明らかにElastic Stackパーツをインストールする必要があります, これまでの経緯 ログスタッシュ, エラスティックサーチ そして キバナ; 次に、ログをLogstashに送信するようにNetScalerに指示します, 私たちの選択の港に, 私たちが発明します (から “制” > “聴講” > “Syslog 監査”. 構成をNetScalerに保存することを忘れないでください.

 

次に、取り込む必要のあるファイルをLogstashに作成します, データの変換と送信. Primero escuchar en el puerto UDP indicado en el paso anterior; 秒, 受信したログを処理し、それらを異なるフィールドに分けて、最終的にElasticsearchに保存します.

 

インプット {
        UDPの {
                タイプ => "ネットスケーラー"
                ポート => "1517"
                タグ => ["ネットスケーラー"]
        }
}

フィルター {

        もし [種類] == "ネットスケーラー" {
                        グロック {
                            マッチ => { "メッセージ" => [
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}コンテキスト%{間}%{ユーザー名:利用者}@%{IPV4の:IP_origen}%{間}-%{間}セッションID:%{間}%{イント:Session_id}%{間}-%{間}ユーザー%{間}%{ユーザー名:ウスアリオ2}%{間}-%{間}Client_ip%{間}%{IPV4の:IP_origen2}%{間}-%{間}Nat_ip%{間}\"マップされた IP"%{間}-%{間}Vserver%{間}%{IPV4の:vServer_ip}:%{数:vServer_puerto}%{間}-%{間}Start_time%{間}\"%{DATE_US:Inicio_fecha}:%{時間:Inicio_hora}%{間}\"%{間}-%{間}End_time%{間}\"%{DATE_US:Fin_fecha}:%{時間:Fin_hora}%{間}\"%{間}-%{間}Duration%{間}%{時間:期間}%{間}-%{間}Http_resources_accessed%{間}%{数:Http_resources_accessed}%{間}-%{間}NonHttp_services_accessed%{間}%{数:NonHttp_services_accessed}%{間}-%{間}Total_TCP_connections%{間}%{数:Total_TCP_connections}%{間}-%{間}Total_UDP_flows%{間}%{数:otal_UDP_flows}%{間}-%{間}Total_policies_allowed%{間}%{数:Total_policies_allowed}%{間}-%{間}Total_policies_denied%{間}%{数:Total_policies_denied}%{間}-%{間}Total_bytes_send%{間}%{数:Total_bytes_send}%{間}-%{間}Total_bytes_recv%{間}%{数:Total_bytes_recv}%{間}-%{間}Total_compressedbytes_send%{間}%{数:Total_compressedbytes_send}%{間}-%{間}Total_compressedbytes_recv%{間}%{数:Total_compressedbytes_recv}%{間}-%{間}Compression_ratio_send%{間}%{数:Compression_ratio_send}\%%{間}-%{間}Compression_ratio_recv%{間}%{数:Compression_ratio_recv}\%%{間}-%{間}LogoutMethod%{間}\"%{日付:LogoutMethod}\"%{間}-%{間}Group\(s\)%{間}\"%{日付:Group}\"",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}コンテキスト%{間}%{ユーザー名:利用者}@%{IPV4の:IP_origen}%{間}-%{間}セッションID:%{間}%{イント:Session_id}%{間}-%{間}ユーザー%{間}%{ユーザー名:ウスアリオ2}%{間}-%{間}Client_ip%{間}%{IPV4の:IP_origen2}%{間}-%{間}Nat_ip%{間}\"マップされた IP"%{間}-%{間}Vserver%{間}%{IPV4の:vServer_ip}:%{数:vServer_puerto}%{間}-%{間}%{貪欲なデータ:メッセージ}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}ユーザー%{間}%{ユーザー名:利用者}%{間}-%{間}Client_ip%{間}%{IPV4の:IP_origen}%{間}-%{間}%{貪欲なデータ:メッセージ}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}Source%{間}%{IPV4の:IP_origen}:%{数:Puerto_origen}%{間}-%{間}Vserver%{間}%{IPV4の:vServer_ip}:%{数:vServer_puerto}%{間}-%{間}NatIP%{間}%{IPV4の:NAT_ip}:%{数:NAT_puerto}%{間}-%{間}目的地%{間}%{IPV4の:IP_destino}:%{数:Puerto_destino}%{間}-%{間}リンク解除%{間}時間%{間}%{DATE_US:Delink_fecha}:%{時間:Delink_hora}%{間}-%{間}Total_bytes_send%{間}%{イント:Total_bytes_enviados}%{間}-%{間}Total_bytes_recv%{間}%{イント:Total_bytes_recibidos}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}Source%{間}%{IPV4の:IP_origen}:%{数:Puerto_origen}%{間}-%{間}目的地%{間}%{IPV4の:Destino_ip}:%{数:Destino_puerto}%{間}-%{間}スタート%{間}時間%{間}%{DATE_US:Inicio_fecha}:%{時間:Inicio_hora}%{間}-%{間}エンド%{間}時間%{間}%{DATE_US:Fin_fecha}:%{時間:Fin_hora}%{間}-%{間}Total_bytes_send%{間}%{イント:Total_bytes_enviados}%{間}-%{間}Total_bytes_recv%{間}%{イント:Total_bytes_recibidos}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}Source%{間}%{IPV4の:IP_origen}:%{数:Puerto_origen}%{間}-%{間}Vserver%{間}%{IPV4の:vServer_ip}:%{数:vServer_puerto}%{間}-%{間}NatIP%{間}%{IPV4の:NAT_ip}:%{数:NAT_puerto}%{間}-%{間}目的地%{間}%{IPV4の:IP_destino}:%{数:Puerto_destino}%{間}-%{間}リンク解除%{間}時間%{間}%{DATE_US:Delink_fecha}:%{時間:Delink_hora}%{間}Total_bytes_send%{間}%{イント:Total_bytes_enviados}%{間}-%{間}Total_bytes_recv%{間}%{イント:Total_bytes_recibidos}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}SPCBId%{間}%{イント:SPCBIdの}%{間}-%{間}クライアントIP%{間}%{IPV4の:IP_origen}%{間}-%{間}クライアントポート%{間}%{数:Puerto_origen}%{間}-%{間}VserverServiceIP%{間}%{IPV4の:vServer_ip}%{間}-%{間}VserverServicePort%{間}%{数:vServer_puerto}%{間}-%{間}クライアントバージョン%{間}%{日付:Client_version}%{間}-%{間}サイファースイート%{間}\"%{日付:Cipher_suite}\"(%{間}-%{間}セッション%{間}再利用率{間}-%{間}HandshakeTime%(ハンドシェイクタイム%){間}%{イント:Handshake_time}%{間}さん)?",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}SPCBId%{間}%{イント:SPCBIdの}%{間}-%{間}発行者名 %{間}\"%{間}%{日付:Issuer_name}\"",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}SPCBId%{間}%{イント:SPCBIdの}%{間}-%{間}件名%{間}\"%{間}%{日付:Subject_name}\"",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}コンテキスト%{間}%{ユーザー名:利用者}@%{IPV4の:IP_origen}%{間}-%{間}セッションID:%{間}%{イント:Session_id}%{間}-%{間}%{ホスト名:FQDNの}%{間}ユーザー%{間}%{ユーザー名:ウスアリオ2}%{間}:%{間}Group\(s\)%{間}%{日付:群}%{間}:%{間}Vserver%{間}%{IPV4の:vServer_ip}:%{数:vServer_puerto}%{間}-%{間}%{DATE_US:日付}:%{時間:時}%{間}:%{間}%{貪欲なデータ:メッセージ}",
                              "^<%{ポシント:syslog_pri}>%{間}%{DATE_US:Log_fecha}:%{時間:Log_hora}%{間}%{SYSLOGホスト:NSlog_hostname}%{間}0-PPEの-0%{間}:%{間}デフォルト%{間}%{言葉:Log_tipo}%{間}%{言葉:Log_evento}%{間}%{イント:Log_id}%{間}0%{間}:%{間}%{貪欲なデータ:メッセージ}"
                                       ]
                            }
                        }

                        ジオイップ {
                          ソース => "IP_origen"
                          ターゲット => "ジオイップ"
                          add_field => [ "[ジオイップ][座標]", "%{[ジオイップ][経度]}" ]
                          add_field => [ "[ジオイップ][座標]", "%{[ジオイップ][緯度]}"  ]
                        }

                        唖 {
                          変換 => [ "[ジオイップ][座標]", "浮く" ]
                          変換 => [ "Total_bytes_enviados", "整数" ]
                          変換 => [ "Total_bytes_recibidos", "整数" ]
                        }
        }
}

アウトプット {

        もし ([種類]=="ネットスケーラー"){

                エラスティックサーチ {
                   インデックス => "ネットスケーラー-%{+YYYYです。MM.ddの}"
                   hosts=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

そこで、例えば「/etc/logstash/conf.d/netscaler.conf」という設定ファイルを作成してみましょう。, 以下に私の例を残します. 私のフィルターは非常に基本的で、最初はLogstashです, しかし、それらは機能する😉ので、興味がある場合はコピーできます, そして、あなたがそれらを改善するならば、あなたは私に渡🙂します最後に、出力でデータを送信するElasticsearchサーバーとそれが保存されるインデックスを示します; 認証がある場合は、「username」パラメータを入力してください’ & 'パスワード’ 出力. 真実は、私が今コードを見ているということです、そしてそれは改善することができます, 覚えている空間で自分を引っ掻きむしりました… 許してもらえれば幸いですが、うまくいきます, 少なくともNetScalerなどの最新バージョンでは 13.0.

 

設定ファイルが作成されたら, Logstashサービスを再起動してリロードすることを忘れないでください. その後はいつものように, Kibanaに行き、データが入ってきたら、 “管理” > “スタック管理” > “キバナ” > “インデックスパターン” > “インデックスパターンの作成” インデックス パターンを作成するには, 私が言ったように, いつも通り (この場合、引用符は付けません) 'ネットスケーラー-*’ そして、データはすでにElasticsearchに正しく保存されています. 今、私たちはから接続することができました “ディスカバー” NetScalerインデックスに追加し、データを収集していることを視覚化します.

 

それから, Kibana でインデックスを作成した後, 今、私たちのGrafanaで、 “データソース” これは、ElasticsearchとNetScalerインデックスを対象としています. それから、それはあなたの想像力を暴走させます, 異なるダッシュボードでダッシュボードを作成する, 視覚化するさまざまなデータを使用, 1 世界地図 着信接続あり, スタイルの1つ サンキー 送信元/宛先 IP と送信されているトラフィックを表示する, 列形式で, で 行き詰り 特定のデータを表示するため (正しいログインなど), 間違った, 接続…

あなたがアイデアを取り入れてそれらを改善するために、すべてを使うことができます, これにより、私たちの(s) Citrix NetScaler Real-Time, 自動更新を every に 10 秒はとても印象的です, また、その日の要約を分析するのにも役立ちます, または、何か奇妙なことが起こったときにそれを知ること… いつも通り, ソーシャルネットワーク😉上でこの種のコンテンツを移動させている方々に感謝します

 

おすすめの投稿

著者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 私に連絡することを躊躇しないでください, できる限りお手伝いします, シェアリングは生きていること ;) . ドキュメントを楽しむ!!!