nginx ログを elasticsearch にインポートする方法の例

nginx ログを elasticsearch にインポートする方法の例

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","re​​gion_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]{の場合
 # ruby​​debuyg に出力し、メタデータを出力する
 stdout{codec => ruby​​debug{metadata => true}}
 }それ以外{
 # 出力内容を「.」に変換します。
 stdout{コーデック => ドット} 
 # 指定されたesに出力
 エラスティックサーチ
  ホスト => ["192.168.15.160:9200"]
  インデックス => "%{[@metadata][index]}"
  ドキュメントタイプ => "doc"
 } 
 }
}

ログスタッシュを起動する

nohup bin/logstash -f test_pipline2.conf &

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ELK を使用して Nginx サーバー ログを分析する方法の詳細な説明
  • Nginx ログの日付別カット(日別カット)の詳しい説明
  • nginx ログカットシェルスクリプト
  • nginx で JSON 形式でログを記録する設定例
  • nginx ログのアクセス時間と最も時間のかかるページ (遅いクエリ) のシェル スクリプト分析
  • Nginx ログを定期的に自動削除する方法
  • Windows での Nginx ログ処理スクリプト
  • Pythonはnginxログファイルを解析します

<<:  JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

>>:  Linux に MySQL をインストールする方法 (yum とソース コードのコンパイル)

推薦する

Nginx サーバーの https 設定方法の例

Linux: Linux バージョン 3.10.0-123.9.3.el7.x86_64 ngin...

HTML Webページの例を使用してヘッドエリアコードの意味を説明する

例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...

よく知られているブラウザのDOCTYPEモード選択メカニズム

ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...

Linux 上での MySQL データベースのインストールと Java プロジェクトの構成に関する詳細なグラフィック説明

1. MySQLデータベースをインストールする① ダウンロードして解凍し、/opt/softディレク...

LinuxでIPアドレスを手動で設定するための詳細な手順

目次1.まずネットワークカードの設定ディレクトリに入る2. ifcfg-ens33ネットワークカード...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

タグのターゲットリンクを iframe に向ける方法

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...

フロントエンドが習得すべき、複数列の等高レイアウトを実現するための CSS テクニック

1. はじめにページを作成しているときに、複数列のレイアウトに遭遇することがあります。各列の内容が異...

Nginx http ヘルスチェック構成プロセス分析

パッシブチェックパッシブ ヘルス チェックでは、NGINX と NGINX Plus はイベントの発...

Docker を使用して pypi プライベート リポジトリを構築する方法

1. 建設1. htpasswd.txtファイルを準備するファイルには、パッケージを倉庫にアップロー...

RedHat 6.5/CentOS 6.5 に MySQL 5.7.20 をインストールするための詳細なチュートリアル

rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...

docker で mysql に接続できない場合の解決策

シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...

LINUX での IPTABLES ファイアウォールの基本的な使用方法のチュートリアル

序文パブリック IP を持つ本番 VPS の場合、必要なポートのみが開かれ、IP とポートを制御する...

相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...