nginx ログは filebeat によって収集され、logstash に渡され、logstash によって処理された後、elasticsearch に書き込まれます。 Filebeat は収集作業のみを担当し、logstash はログを elasticsearch に書き込んだ後、ログのフォーマット、データの置換、分割、インデックスの作成を完了します。 1. nginxログフォーマットを設定する log_format main '$remote_addr $http_x_forwarded_for [$time_local] $server_name $request ' '$status $body_bytes_sent $http_referer ' '"$http_user_agent" ' '"$接続"' '"$http_cookie"' '$リクエスト時間' '$upstream_response_time'; 2. Filebeatをインストールして設定し、nginxモジュールを有効にする tar -zxvf filebeat-6.2.4-linux-x86_64.tar.gz -C /usr/local cd /usr/local;ln -s filebeat-6.2.4-linux-x86_64 ファイルビート cd /usr/local/filebeat nginxモジュールを有効にする ./filebeatモジュールはnginxを有効にする モジュールを表示 ./filebeat モジュールリスト 設定ファイルを作成する vim /usr/local/filebeat/blog_module_logstash.yml ファイルビートモジュール: - モジュール: nginx アクセス: 有効: true var.paths: ["/home/weblog/blog.cnfol.com_access.log"] #エラー: # 有効: true # 変数パス: ["/home/weblogerr/blog.cnfol.com_error.log"] 出力.logstash: ホスト: ["192.168.15.91:5044"] ファイルビートを開始 ./filebeat -c blog_module_logstash.yml -e 3.logstashを設定する tar -zxvf logstash-6.2.4.tar.gz /usr/local cd /usr/local;ln -s logstash-6.2.4 logstash nginx ログのパイプラインファイルを作成する cd /usr/local/logstash Logstash 組み込みテンプレート ディレクトリ ベンダー/バンドル/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns grok-patternsを編集し、複数のIPをサポートする通常のパターンを追加します。 転送 (?:%{IPV4}[,]?[ ]?)+|%{WORD} 公式グロク http://grokdebug.herokuapp.com/patterns# logstashパイプライン設定ファイルを作成する #入力{ # 標準入力 {} #} # ファイルビートからのデータ入力を受け入れる { ビート { ポート => 5044 ホスト => "0.0.0.0" } } フィルター { # デバッグスイッチを追加します mutate{add_field => {"[@metadata][debug]"=>true}} 理解する { # nginx ログをフィルタリング #match => { "message" => "%{NGINXACCESS_TEST2}" } #match => {"message" => '%{iporhost:clientip}#(?<http_x_forwarded_for> [^\#]*)番号:httpversion}#%{number:response}#(?:%:bytes} | - ) %{number:connection} | - )#(?: "(?<cookies> [^#]*)") #match => {"message" => '(?:%{iporhost:clientip} | - )(?:%{two_ip:http_x_forwarded_for} |%{ipv4:http_x_forwarded_for} | - )\ [%{httpdate:[webtime](? } | - )%{word:method}%{uripathparam:request} http/%{number:httpversion}%{number:response}(?:%{number:bytes} | - )(?番号:connection} | - ) "|%{number:connection} | - )(?:"(?<cookies> [^#]*) ")%{number:request_time:float}(?:%{number:upstream_response_time:float} | - ) '}} match => {"message" => '(?:%{iporhost:clientip} | - )%{forword:http_x_forwarded_for} \ [%{httpdate:[@metadata] [webtime]} \](? {number:httpversion}%{number}(?:%:bytes} | - )(?: "(?:notspace:referrer} | - {notspace:referrer} | - )%{qs:agent}(? %{number:request_time:float}(?:%{number:upstream_response_time:float} | - ) '} } # デフォルトの@timestamp(beatsがログを収集した時間)値を新しいフィールド@read_tiimestampに割り当てます ルビー{ #コード => "event.set('@read_timestamp',event.get('@timestamp'))" # タイムゾーンを East 8 に変更します。コード => "event.set('@read_timestamp',event.get('@timestamp').time.localtime + 8*60*60)" } # nginx ログ記録時間をフォーマットします # 時間をフォーマットします 20/May/2015:21:05:56 +0000 日付 { ロケール => "en" 一致 => ["[@metadata][webtime]","dd/MMM/yyyy:HH:mm:ss Z"] } # バイトフィールドを文字列から数値に変換する mutate { 変換 => {"バイト" => "整数"} } # クッキーフィールドをJSONに解析する #変異 { # gsub => ["cookies",'\;',','] #} # CDN アクセラレーションが使用されている場合、http_x_forwarded_for には複数の IP アドレスが存在します。最初の IP アドレスはユーザーの実際の IP アドレスです。 if[http_x_forwarded_for] =~ ", "{ ルビー{ コード => 'event.set("http_x_forwarded_for", event.get("http_x_forwarded_for").split(",")[0])' } } # IPアドレスを解析し、IPアドレスの地理的位置を取得します。geoip { ソース => "http_x_forwarded_for" # # IP の緯度と経度、国、都市、タイムゾーンのフィールドのみを取得します => ["location","country_name","city_name","region_name"] } # エージェントフィールドを解析してブラウザやシステムバージョンなどの特定の情報を取得します useragent { ソース => "エージェント" ターゲット => "ユーザーエージェント" } #削除するデータを指定する#mutate{remove_field=>["message"]} # ログ名に応じてインデックス名のプレフィックスを設定するruby { コード => 'event.set("@[metadata][index_pre]",event.get("source").split("/")[-1])' } # @timestamp を 2019.04.23 にフォーマットします ルビー{ コード => 'event.set("@[metadata][index_day]",event.get("@timestamp").time.localtime.strftime("%Y.%m.%d"))' } # 出力のデフォルトのインデックス名を設定する mutate { 追加フィールド => { #"[@metadata][index]" => "%{@[metadata][index_pre]}_%{+YYYY.MM.dd}" "[@metadata][index]" => "%{@[metadata][index_pre]}_%{@[metadata][index_day]}" } } # クッキーフィールドをJSONに解析する # 変異 { # gsub => [ # "クッキー", ";", ",", # "クッキー", "=", ":" # ] # #split => {"cookies" => ","} # } # json_encode { # ソース => "cookies" # ターゲット => "cookies_json" # } # 変異 { # gsub => [ # "cookies_json", ',', '","', # "cookies_json", ':', '":"' # ] # } # json { # ソース => "cookies_json" # ターゲット => "cookies2" # } # grok解析でエラーが発生した場合、エラーを別のインデックスに書き込みます if "_grokparsefailure" in [tags] { #if "_dateparsefailure" in [タグ] { 変異 { 置換 => { #"[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{+YYYY.MM.dd}" "[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{@[metadata][index_day]}" } } # エラーがない場合はメッセージを削除します }それ以外{ mutate{remove_field=>["メッセージ"]} } } 出力{ [@metadata][debug]{の場合 # rubydebuyg に出力し、メタデータを出力する stdout{codec => rubydebug{metadata => true}} }それ以外{ # 出力内容を「.」に変換します。 stdout{コーデック => ドット} # 指定されたesに出力 エラスティックサーチ ホスト => ["192.168.15.160:9200"] インデックス => "%{[@metadata][index]}" ドキュメントタイプ => "doc" } } } ログスタッシュを起動する nohup bin/logstash -f test_pipline2.conf & 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JSはキャンバス技術を使用してeChartsの棒グラフを模倣します
>>: Linux に MySQL をインストールする方法 (yum とソース コードのコンパイル)
1. ロゴに代替テキストを追加するこれには 2 つの利点があります。スクリーン リーダーがロゴ画像の...
Ubuntu 1804 への MySQL 5.7 のインストールについて詳しく紹介します。 MySQ...
1. GitLabの紹介Gitlab 公式アドレス: https://about.gitlab.co...
目次1. ルートの遅延読み込みとは何ですか? 2. ルートの遅延読み込みの使用1. ルートの遅延読み...
MySQL解凍版とNavicatデータベース操作ツールのインストールは、以下のとおりです。 1. M...
一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...
Macでデータベースを操作する際に個人が遭遇するデータベース起動の問題の簡単な記録1. Apple-...
インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...
導入yum (Yellow dog Updater, Modified) は、Fedora、RedH...
序文この記事では、Windows で Mysql をバックアップするための簡単な BAT スクリプト...
mysql を構成するときに、構成ファイル内のデフォルトのストレージ エンジンを InnoDB に設...
この記事では、ボトムクエリ機能を実装するためのVueの具体的なコードを例として紹介します。具体的な内...
1. インデックスの役割一般的に言えば、インデックスは本の目次に相当します。条件に基づいてクエリを実...
この記事では、VueでEchartsをインポートして線散布図を実現する具体的なコードを参考までに共有...
多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...