ES(ElasticSearch)の使用で毎日ログ分析の多くの小さなパートナー、ないネイティブESのPaaSサービスは、MicrosoftのクラウドのAzureでホストされています。実際には、マイクロソフトのクラウドAzureのデータエクスプローラには非常に適したサービスのログ解析では、マイクロソフトのクラウドネイティブLogAnalyticsサービスは、Azureのデータエクスプローラサービス建物に基づいて、データソースに比べ柔軟性、ネイティブのデータとして、マイクロソフトのクラウドサービスのためのLogAnalyticsソース互換性は、私はあなたがAzureのデータエクスプローラのサービスを使用することをお勧め柔軟性が男ここに独自のデータソースクラスを構築したい人、優れている、それはELKが継承され、既存の技術スタックをスムーズにすることができ、それはそう、ネイティブサポートLogStashと統合しますログインするさまざまなデータソースを分析Azureのデータエクスプローラのクエリのために収集することができます。AzureのデータエクスプローラのPaaSとして塩基添加の建設は、サービス利用者は、基盤となるインフラを気にしない、と会うのパフォーマンス要件へのスムーズな水平方向のスケールを達成することができますホストされています。
本論文では、nginxのアクセスログは、例えば、ログ収集と分析Filebeat + Logstash + Azureのデータエクスプローラを実装する方法を見つけます。アーキテクチャ図は以下を参照してください。
この記事のnginxの例では、バージョン1.16.1を使用していますnginxのアクセスログは、JSONフォーマットのネイティブサポートを持って最初から1.11.8のバージョンは、我々は次のようnginxの設定ファイルを参照することができ、アクセスログのフォーマットは、nginxのログ-json.confを作成し、定義します
LOG_FORMATのJSONエスケープ= jsonの'{' ' "REMOTE_IP": "$ REMOTE_ADDR"、' ' "USER_NAME": "$ REMOTE_USER"、' ' "時間": "$ time_iso8601"、' 「 "メソッド": "$ REQUEST_METHOD" ' ' "nginxhostname": "$ホスト"、' ' "URL": "$ REQUEST_URI"、' ' "http_protocol": "$ SERVER_PROTOCOL"、' ' "RESPONSE_CODE": "$状態を"、' ' "バイト" : "$ body_bytes_sent"、 ' ' "リファラ": "$ HTTP_REFERER"、' ' "user_agentの": "$ HTTP_USER_AGENT"' '};
参照nginx.conf上記構成では、HTTPでの断面構成は、上記の定義、およびアクセスログ出力パスの定義と形式を挙げました。
HTTP { #他のコンフィグ設定 ## #のログ設定 ## nginxのログ-json.confが含まれます。 access_logの/var/log/nginx/access.json JSON。 error_logに/var/log/nginx/error.log; #その他のコンフィグ設定 }
コンフィギュレーションアクセスログFilebeatは、ログのnginxの経路から収集し、次のように入力LogStashのログは、Filebeat構成ファイルを変換し、前記パス定義ログアクセスログファイルパスを変更nginxの出力としてLogStashに配置され、この例でLogstash nginxのあなたは、展開の実際の展開で独立したLogstash場合Logstashアドレスは、localhostですので、それは、同じホスト上の実際のアドレスに応じて変更することができます。
###################### Filebeat設定例######################### #このファイルは、最も一般的な強調表示する設定ファイルの例です 。#オプションを。同じディレクトリからfilebeat.reference.ymlファイルがすべて含まれている より多くのコメントを#サポートされているオプションを。あなたはそれを参照として使用することができます。 # #あなたがここに完全な設定の参照を見つけることができます: #https://www.elastic.co/guide/en/beats/filebeat/index.html より多くの利用可能なモジュールとオプションについては#、filebeat.reference.ymlのサンプルを参照してください。 #設定ファイル。 #=========================== Filebeat入力==================== ========= filebeat.inputs: #それぞれが-入力されています。ほとんどのオプションは、そう、入力レベルに設定することができます #あなたは、様々な構成のために異なる入力を使用することができます。 #以下は、入力された特定の構成があります。 -タイプ:ログイン この入力の設定を有効にするにはtrueに#変更を。 有効:真の クロールとフェッチする必要があります#パスを。ベースパスをグロブ。パス: - /var/log/nginx/*.json # - C:\はProgramData \ elasticsearch \ログ\ * タグ:[ "nginxの"、 "JSON"] JSON: keys_under_root:真 add_error_key:真 #が行を除外します。マッチする正規表現のリスト。これは、ある行に低下 リストから任意の正規表現にマッチする#を。 #exclude_lines:[ '^ DBG'] #は、行を含めます。マッチする正規表現のリスト。これは、ある行をエクスポート #リストから任意の正規表現にマッチします。 #include_lines:[ '^ ERR'、 '^ WARN'] #ファイルを除外します。マッチする正規表現のリスト。Filebeatファイル降下 #は、リストから任意の正規表現にマッチしているし。デフォルトでは、ファイルがドロップされません。 #exclude_files:[ '.gzを$'] #オプションの追加フィールド。これらのフィールドは自由に取り出すことができ フィルタリングするためのクロールされたログファイルに追加情報を追加する# #fieldsを: #レベル:デバッグ #レビュー:1 ###マルチラインオプション #複数行を複数行にまたがるログメッセージのために使用することができます。これが一般的です のJavaスタックトレースのための#やC-行継続 #持つ正規表現のパターン一致させます。例えば、パターンは、[で始まるすべての行と一致する #1 multiline.pattern:^ \ [ パターン下のパターンセットが否定するかどう#の定義。デフォルトはfalseです。 #multiline.negate:偽 #マッチは「後」または「前」に設定することができます。線がパターンに追加することが必要がある場合、定義するために使用される 前又は後又は長いパターンがネゲートに基づいて一致しないように一致した#(ありません)。 #注:後の前に、前と同等にはLogstashの次にに相当している #multiline.match:後 #======================== ===== Filebeatモジュール=============================== filebeat.config.modules: #コンフィギュレーションのロードのためのグロブパターン パス:$ {path.config} /modules.d / * YML。 trueに#セットリロード設定を有効にするには、 reload.enabled:偽の #パスの下でどのファイルに期間は、変更の有無を確認する必要がある #reload.period:10sが #==================== Elasticsearchテンプレート設定======== ================== #setup.template.settings: #index.number_of_shards:1 #index.codec:best_compression #_source.enabled:偽 #====== ==========================一般======================= ============== #ネットワークデータを公開する荷主の名前。これは、グループに使用することができ 、Webインターフェイスで、単一の荷主により送信されたすべてのトランザクション#。 #NAME: #荷主のタグはそれぞれに自分のフィールドに含まれている 公表#トランザクション。 #tags:[ "サービス-X"、 "Web層"] あなたに追加の情報を追加して指定することができます#オプションフィールド #出力。 #fields: #1 ENV:ステージング #==============================ダッシュボード=========== ========================== #これらの設定は、Kibanaインデックスにサンプルダッシュボードをロードするコントロール。ロード #ダッシュボードはデフォルトでは無効になっていると設定することで、どちらか有効にすることができ 、ここで#オプションをや`setup`コマンドを使用して。 #setup.dashboards.enabled:偽 #ダッシュボードは、アーカイブダウンロードするところからURL。デフォルトでは、このURLの #は、ビートの名前とバージョンに基づいて計算された値を持っています。解放のために #バージョン、このURLのポイントartifacts.elastic.coの上のダッシュボードアーカイブへ #のウェブサイト。 #setup.dashboards.url: #============================== Kibana ================== =================== #ビートバージョン6.0.0以降では、ダッシュボードはKibana APIを介してロードされます。 #これはKibanaエンドポイントの設定が必要です。 #setup.kibana: #Kibanaホスト スキームとポートが省略でき、デフォルト(httpと5601)に設定されます。# #場合は、あなたが指定し、追加パスは、スキームが必要とされます。http:// localhost:5601 /パス ます。https:#IPv6アドレスは、いつものように定義する必要があります。// [2001:DB8 :: 1]:5601 #host: "localhostを:5601" #KibanaスペースID #ダッシュボードがロードされるべきへKibanaスペースのID。デフォルトでは、 #デフォルトのスペースが使用されます。 #space.id: #=============================弾性クラウド================== ================ #これらの設定は、弾性クラウド(https://cloud.elastic.co/)とFilebeatを使用して簡素化します。 #cloud.id設定は`output.elasticsearch.hosts`と上書き #` setup.kibana.host`オプションを。 #あなたは、弾性クラウドのWeb UIで`cloud.id`を見つけることができます。 #cloud.id: #cloud.auth設定は`output.elasticsearch.username`と上書き #` output.elasticsearch.password`設定を。`<パス>:フォーマットは、<ユーザー>`です。 #cloud.auth: #================================出力================ ===================== #HTTPSサーバの検証のためのルート証明書のリスト #ビートによって収集されたデータを送信して使用するものを出力する設定。 #-------------------------- Elasticsearch出力--------------------- --------- #output.elasticsearch: に接続するホストの#配列。 #ホスト:[ "localhostを:9200"] #オプションのプロトコルと基本認証の資格情報。 #protocol: "https"の #username: "弾性" #password: "changemeを" #----------------------------- Logstash出力-------------------------------- output.logstash:#ザLogstashホストの ホスト:[ "ローカルホスト:5044"] #オプションのSSL。デフォルトではオフになっています。 「の/ etc / PKI /クライアント/ CERT:#ssl.certificate。 #ssl.certificate_authorities:[ "/etc/pki/root/ca.pem"] #証明書SSLクライアント認証のための #クライアント証明書キー #1 ssl.key: "/etc/pki/client/cert.key" #=== =============================プロセッサ==================== ================= #configureはビートによって生成されたイベントを強化したり、操作するために、プロセッサー。 #processors: #- add_host_metadata:〜 #- add_cloud_metadata:〜 #================================ログ=== ================================== #セットは、レベルをログに記録します。デフォルトのログレベルはinfoです。 #利用可能なログレベルは次のとおりです。エラー、警告、情報、デバッグ #logging.level:デバッグ #デバッグレベルでは、選択的に一部のコンポーネントのみのログを有効にすることができます。 #[「*」]すべてのセレクタが使用できるようにするために。他のセレクタの例としては、「ビート」、ある #「公開」、「サービス」。 #logging.selectors:[ "*"] #============================== X-Packには、監視=============== ================ #filebeatは監視中央Elasticsearchに内部メトリックをエクスポートすることができます #クラスタを。これはElasticsearchで有効にする監視xpack必要です。 #レポートは、デフォルトでは無効になっています。 監視レポーターを有効にするには、trueに設定する#。 #はmonitoring.enabled:偽 #はこのために、データを監視し、その下ElasticsearchクラスタのUUIDを設定します。 #Filebeatインスタンスは、スタック監視UIに表示されます。output.elasticsearch場合は #が有効になっている、UUIDはoutput.elasticsearchによって参照Elasticsearchクラスターに由来しています。 #はmonitoring.cluster_uuid: #コメントを解除Elasticsearchにメトリックを送信します。ほとんどの設定 #Elasticsearch出力はここにも受け入れられています。 #設定は*クラスタの監視*あなたのElasticsearchを指している必要があることに注意してください。 #設定されていない任意の設定が自動的にElasticsearchから継承され ますが、Elasticsearch出力は、設定されているそうだとすれば、#出力構成 は、単に、それはあなたのElasticsearch監視クラスタを指していること#をすることができます #コメントを解除し、次の行。 #monitoring.elasticsearch: #=================================移行========== ========================
Logstashログ情報出力構成読み出しログからの入力は、GROKによってhttp_protocol nginxのアクセスログ出力から抽出されたファイラーのHTTPバージョン番号をFilebeat定義特徴、構成ファイルの次の例にAzureのデータエクスプローラ、Logstash基準に結果データの変換、ネイティブnginxのは、ユーザーエージェントのGeoIPプラグとプラグによってフィールドログの変換します。受信機、前記ingest_url、APP_ID、app_key、app_tenant、として定義アズールデータエクスプローラ出力部データベース、テーブル、マッピング作成アズールデータエクスプローラ内の情報に従って定義されたフィールド。:Azureのデータエクスプローラプラグインに含まれていないデフォルトLogstashは、以下のインストールマニュアルを参照してくださいhttps://docs.microsoft.com/en-us/azure/data-explorer/ingest-data-logstash
入力{ ビート{ ポート=>「5044」 コーデック=> JSON } } このファイルのフィルタ部分は、それがあることを示すためにコメントアウトされ# オプション#。 フィルタ{ [タグ]の「nginxの」IF { #nginxのは、HTTPバージョン、プロトコルのみをログに記録しません。 #すなわちHTTP / 1.1、HTTP / 2 GROK { マッチ=> { "[http_protocol]" => "HTTP /%{NUMBER:[http_version]}" } } のGeoIP { ソース=> "[REMOTE_IP]" => "ターゲット[geoipの]」 ソース=> "[user_agentの" ターゲット=> "user_agent_info" } } } 出力{ kusto { パス=> "/tmp/kusto/%{+YYYY-MM-dd-HH-mm-ss}.txt" ingest_url = > "https://ingest-xxx.westus2.kusto.windows.net/" APP_ID => "XXX" #紺碧管理アプリケーションアイデンティティ app_key => "XXX" #紺碧管理アプリケーションID、パスワード app_tenant => "XXX" #紺碧テナントIDの ADXの中で定義された=> "nginxの" #データベース名データベース テーブル=> "nginxlogs"ADXの中で定義された#テーブル名 ADXで定義されたマッピング=>「basicmsg」#テーブルマッピングスキーマ } }
設定Azureのデータエクスプローラ、ここではそれらを繰り返すない作成するプロセスは、我々はドキュメント自体を相談することができます。ここでは主にテーブルがJSON形式のログフィールドがADXにマップADXの最後のテーブル記憶nginxのアクセスログ、フィールド型定義のスキーマに従ってくださいする必要があるので、LogStashからマッピング定義が来るである、作成する方法を表とマッピング上で引用紹介しますログ表インチ
---表を作成します。
.createテーブルnginxlogs(REMOTE_IP:文字列、ユーザー名:文字列、アクセス時間:日時、方法:文字列、RESPONSE_CODE:INT、URL:文字列、http_protocol:文字列、http_version:文字列、bodybyte:int型、参照元:文字列、user_agent_info:ダイナミック、のGeoIP :ダイナミック)
- マッピングの作成
.createテーブルnginxlogs摂取JSONマッピング 'basicmsg'「[{ "列": "REMOTE_IP"、 "パス": "$ REMOTE_IP。"}、{ "列": "ユーザ名"、 "パス": "$ユーザ名" }、{ "列": "アクセス時間"、 "パス": "$時間"}、{ "列": "方法"、 "パス": "$方法"}、{ "列": "RESPONSE_CODE" 、 "パス": "$ RESPONSE_CODE。"}、{ "列": "URL"、 "パス": "$ URL。"}、{ "列": "http_protocol"、 "パス": "$ http_protocol" }、{ "列": "http_version"、 "パス": "$ http_version"}、{ "列": "bodybyte"、 "パス": "$バイト"}、{ "列":」リファラー " "パス": "$リファラー"}、{ "列": "user_agent_info"、 "パス": "$ user_agent_info"}、{ "列": "のGeoIP"、 "パス":" $。 geoipの "}]」
設定が完了すると、我々はADXに簡単な言語に従うことによってKQLログについての問い合わせを受けました
nginxlogs | アクセス時間DESCで並べ替え| 10を取ります
これまでのところADXログ解析エンジンのログ収集喫水線を使用すると、ADX飛ん自己が提供するクエリ言語をKQLすることができ、開いた、そして今日ここでまず、私はあなたにKQLによって例示される単純なクエリのいくつかの例をあげるブログを書きました。