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:
|
<<: JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren
>>: So installieren Sie MySQL unter Linux (Yum und Quellcode-Kompilierung)
Inhaltsverzeichnis Überblick Build-Prozess Verwan...
Inhaltsverzeichnis Vorwort 1. Umgebungskonfigurat...
MySQL 8.0.19 unterstützt die Sperrung des Kontos ...
JS implementiert ein Hover-Dropdown-Menü. Dies is...
MySQL muss auf Version 5.5.3 oder höher aktualisi...
Die MySQL-Datenbank verfügt nicht über einen inkr...
Ich habe vor Kurzem angefangen, Linux zu lernen. ...
Inhaltsverzeichnis 1 Was ist Funktions-Currying? ...
Hallo zusammen! Ich bin Mr. Tony, der nur über Te...
Ich habe viele davon gesammelt, aber alle endeten...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Partikeleffekte 2. Laden Si...
Dieses Tag ist nicht Teil von HTML3.2 und wird nu...
Inhaltsverzeichnis 1. MySQL 8.0.18 installieren 2...
Einführung Während des Front-End-Projektentwicklu...