Beispiel für den Import von Nginx-Protokollen in Elasticsearch

Beispiel für den Import von Nginx-Protokollen in Elasticsearch

Die Nginx-Protokolle werden von Filebeat gesammelt, an Logstash übergeben und nach der Verarbeitung durch Logstash in Elasticsearch geschrieben. Filebeat ist nur für die Erfassungsarbeit verantwortlich, während Logstash die Protokollformatierung, den Datenersatz, die Aufteilung und die Erstellung von Indizes nach dem Schreiben der Protokolle in Elasticsearch übernimmt.

1. Konfigurieren Sie das Nginx-Protokollformat

log_format main '$remote_addr $http_x_forwarded_for [$time_local] $server_name $request ' 
            „$status $body_bytes_sent $http_referer“ 
            '"$http_user_agent" '
            '"$Verbindung" '
            '"$http_cookie" '
            „$Anforderungszeit“
            „$upstream_response_time“;

2. Installieren und konfigurieren Sie Filebeat und aktivieren Sie das Nginx-Modul

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 filebeat
cd /usr/local/filebeat

Nginx-Modul aktivieren

./filebeat-Module aktivieren nginx

Modul anzeigen

./filebeat-Modulliste

Erstellen einer Konfigurationsdatei

vim /usr/local/filebeat/blog_module_logstash.yml
Dateibeat.modules:
- Modul: nginx
 Zugang:
  aktiviert: true
  var.paths: ["/home/weblog/blog.cnfol.com_access.log"]
 #Fehler:
 # aktiviert: true
 # var.paths: ["/home/weblogerr/blog.cnfol.com_error.log"]


Ausgabe.logstash:
 Gastgeber: ["192.168.15.91:5044"]

Starten Sie Filebeat

./filebeat -c blog_module_logstash.yml -e

3. Logstash konfigurieren

tar -zxvf logstash-6.2.4.tar.gz /usr/local
cd /usr/local;ln -s logstash-6.2.4 logstash
Erstellen Sie eine Pipeline-Datei für das Nginx-Protokoll cd /usr/local/logstash

Integriertes Logstash-Vorlagenverzeichnis

Anbieter/Bundle/jruby/2.3.0/Gems/logstash-patterns-core-4.1.2/Muster

Bearbeiten Sie Grok-Muster und fügen Sie ein reguläres Muster hinzu, das mehrere IPs unterstützt

VORWORT (?:%{IPV4}[,]?[ ]?)+|%{WORT}

Offizielles Grok

http://grokdebug.herokuapp.com/patterns#

Erstellen einer Logstash-Pipeline-Konfigurationsdatei

#Eingabe {
# stdin {}
#}
# Dateneingabe von Filebeat akzeptieren {
 schlägt {
 Port => 5044
 Host => "0.0.0.0"
 }
}

Filter {
 # Einen Debugging-Schalter hinzufügen mutate{add_field => {"[@metadata][debug]"=>true}}
 grok {
 # Nginx-Protokoll filtern #match => { "message" => "%{NGINXACCESS_TEST2}" }
 #Match => {"message" => ' %{iporhost: clientIp} # (? <http_x_forwarded_for> [^\ #]*) # \ [ %{httpdate: [@metadata] [WebTime]} {{nicht problem {{{nichtspace: Hostname: Hostname: {{} # %{Word {Word {Word {Word {{Word {Word {{Word {{Word {Word} {{{{{{{nicht : httpversion} #%{Nummer: Antwort} # (?:%{number: bytes} |-) # (?: "(?:%{NotSpace: Referrer} |-)" |%{NotSpace: Referrer} | {Nummer: Verbindung} |-) # (?: "(? <Cookies> [^ #]*)") # %{Nummer: Request_time: float} # (?: %{Number: upstream_response_time: float} |-) '}
 #Match => {"message" => '(?:%{iporhost: clientIp} |-) (? |-)%{word: methode}%{afripathparam: request} http/%{numme: httpversion}%{numme: response} (? : Verbindung} |-) "|%{Nummer: Verbindung} |-) (?:" (? <Cookies> [^#]*) ")%{Nummer: Request_Time: float} (?
    match => {"message" => '(? Nummer: httpversion}%{Nummer: Antwort} (? {Nummer: Request_time: float} (?:%{number: upstream_response_time: float} |-) '}
 }
 # Weisen Sie dem neuen Feld @read_tiimestamp den Standardwert @timestamp (die Zeit, zu der Beats Protokolle sammelt) zu
 Rubin { 
 #code => "event.set('@read_timestamp',event.get('@timestamp'))"
 #Ändern Sie die Zeitzone auf Ost 8 Code => "event.set('@read_timestamp',event.get('@timestamp').time.localtime + 8*60*60)"
 }
 # Formatieren Sie die Aufzeichnungszeit des Nginx-Protokolls. # Formatieren Sie die Zeit 20. Mai 2015:21:05:56 +0000
 Datum {
 Gebietsschema => "en"
 Übereinstimmung => ["[@metadata][webtime]","dd/MMM/yyyy:HH:mm:ss Z"]
 }
 # Wandelt das Bytefeld von einem String in eine Zahl um mutate {
 konvertieren => {"Bytes" => "Ganzzahl"}
 }
 # Analysieren Sie das Cookie-Feld in ein JSON
 #mutieren {
 # gsub => ["Cookies",'\;',',']
 #} 
 # Wenn CDN-Beschleunigung verwendet wird, gibt es mehrere IP-Adressen für http_x_forwarded_for. Die erste IP-Adresse ist die tatsächliche IP-Adresse des Benutzers.
 wenn[http_x_forwarded_for] =~ ", "{
     Rubin {
         Code => 'event.set("http_x_forwarded_for", event.get("http_x_forwarded_for").split(",")[0])'
        }
    }
 # Analysieren Sie die IP-Adresse und ermitteln Sie den geografischen Standort der IP-Adresse geoip {
 Quelle => "http_x_forwarded_for"
 # # Holen Sie sich nur die Felder Längen- und Breitengrad, Land, Stadt und Zeitzone der IP => ["Standort","Ländername","Stadtname","Regionsname"] 
 }
 # Analysieren Sie das Agent-Feld, um spezifische Informationen wie Browser- und Systemversion zu erhalten useragent {
 Quelle => "Agent"
 Ziel => "Benutzeragent"
 }
 #Geben Sie die zu löschenden Daten an#mutate{remove_field=>["message"]}
 # Legen Sie das Indexnamenpräfix entsprechend dem Protokollnamen ruby ​​​​{ fest
 Code => 'Ereignis.Setzen("@[Metadaten][index_pre]",Ereignis.Get("Quelle").Split("/")[-1])'
 } 
 # Formatieren Sie @timestamp auf 2019.04.23
 Rubin {
 Code => 'Ereignis.Setzen("@[Metadaten][Index_Tag]",Ereignis.Get("@Zeitstempel").Zeit.Lokalzeit.strftime("%Y.%m.%d"))'
 }
 # Legen Sie den Standardindexnamen für die Ausgabe von mutate { fest.
 Feld hinzufügen => {
  #"[@metadata][index]" => "%{@[metadata][index_pre]}_%{+JJJJ.MM.tt}"
  "[@metadata][index]" => "%{@[metadata][index_pre]}_%{@[metadata][index_day]}"
 }
 }
 # Analysieren Sie das Cookies-Feld in JSON
# mutieren {
# gsub => [
# "Kekse", ";", ",",
# "Kekse", "=", ":"
# ]
# #split => {"Cookies" => ","}
# }
# json_encode {
# Quelle => "Cookies"
# Ziel => "cookies_json"
# }
# mutieren {
# gsub => [
# "cookies_json", ',', ',',
# "cookies_json", ':', '":"'
# ]
# }
# json {
# Quelle => "cookies_json"
# Ziel => "Cookies2"
# }
 # Wenn beim Grok-Parsing ein Fehler auftritt, schreiben Sie den Fehler in einen separaten Index, wenn "_grokparsefailure" in [tags] {
 #if "_dateparsefailure" in [tags] {
 mutieren {
  ersetzen => {
  #"[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{+JJJJ.MM.tt}"
  "[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{@[metadata][index_day]}"
  }
 }
 # Wenn kein Fehler vorliegt, löschen Sie die Nachricht
 }anders{
 mutieren{remove_field=>["Nachricht"]}
 }
}

Ausgabe {
 wenn [@metadata][debug]{
 # Ausgabe an rubydebuyg und Ausgabemetadaten
 stdout{codec => rubydebug{metadata => true}}
 }anders{
 # Konvertieren Sie den Ausgabeinhalt in "."
 stdout{codec => Punkte} 
 # Ausgabe an das angegebene es
 elastische Suche
  Hosts => ["192.168.15.160:9200"]
  index => "%{[@metadata][index]}"
  Dokumenttyp => "Dokument"
 } 
 }
}

Starten Sie Logstash

nohup bin/logstash -f test_pipline2.conf &

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Verwendung von ELK zur Analyse von Nginx-Serverprotokollen
  • Detaillierte Erklärung zum Nginx-Protokollschneiden nach Datum (Schneiden nach Tag)
  • Shell-Skript zum Schneiden von Nginx-Protokollen
  • Konfigurationsbeispiel für die Protokollierung im JSON-Format in nginx
  • Shell-Skript-Analyse der Nginx-Protokollzugriffszeiten und der zeitaufwändigsten Seiten (langsame Abfrage)
  • So löschen Sie Nginx-Protokolle regelmäßig automatisch
  • Nginx-Protokollverarbeitungsskript unter Windows
  • Python analysiert Nginx-Protokolldateien

<<:  JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren

>>:  So installieren Sie MySQL unter Linux (Yum und Quellcode-Kompilierung)

Artikel empfehlen

Vue führt weltweit SCSS (Mixin) ein

Inhaltsverzeichnis 1. mixin.scss 2. Einzeldateinu...

Tipps zum MySQL-Abfragecache

Inhaltsverzeichnis Vorwort Einführung in QueryCac...

Analyse der Prinzipien der MySQL Slow Query-bezogenen Parameter

MySQL Slow Query, dessen vollständiger Name „Slow...

Vorteile und Prinzipien der MySQL-Replikation im Detail erklärt

Bei der Replikation werden die DDL- und DML-Opera...

Detaillierte Erläuterung des Vue-Router-Routings

Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...

Detaillierte Erklärung des JS-Speicherplatzes

Inhaltsverzeichnis Überblick 1. Stapeln und Aufhä...

Detaillierte Erklärung des strikten Modus in JavaScript

Inhaltsverzeichnis Einführung Verwenden des strik...

Detailliertes Verständnis des Lebenszyklusvergleichs zwischen Vue2 und Vue3

Inhaltsverzeichnis Zyklusvergleich Verwendung Zus...