web-dev-qa-db-fra.com

Existe-t-il un modèle de réseau {} existant pour le format de date AAAA/MM/JJ HH: mm: ss?

Je vérifiais les journaux d'erreurs nginx sur notre serveur et découvris qu'ils commencent par la date formatée comme suit:

2015/08/30 05:55:20

c'est-à-dire YYYY/MM/DD HH:mm:ss. J'essayais de trouver un modèle de date grok existant qui pourrait m'aider à analyser rapidement tout cela, mais malheureusement, je ne pouvais pas trouver un tel format de date. Finalement, j'ai dû écrire le motif comme suit: 

%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? 

J'espère toujours s'il y a un schéma plus court pour le même?

7
Mandeep Singh

Non, vous trouvez les modèles inclus sur github. Le commentaire à datestamp semble correspondre à votre AAAA/MM/JJ, mais DATE_US et DATE_EU sont différents.

Je suggère de surcharger le modèle DATE en utilisant l’option grok patterns_dir et d’utiliser DATESTAMP.

DATE_YMD %{YEAR}/%{MONTHNUM}/%{MONTHDAY}
DATE %{DATE_US}|%{DATE_EU}|%{DATE_YMD}

ou ajoutez simplement votre modèle dans un fichier de modèles et utilisez l'option patterns_dir de grok.

6
dtrv

Stratégie de capture d'horodatage réussie comprenant 3 éléments

  1. Précision et fuseau horaire dans le journal d'origine. Changez le format de votre journal nginx timestamp.

Utilisez $msec pour capturer des millisecondes. Sinon, vous ne pourriez pas le trier avec précision.

log_format custom '[$msec] [$remote_addr] [$remote_user] '
                  '"$request" $status '
                  '"$http_referer" "$http_user_agent"';
  1. Horodatage brut. Utilisez la correspondance gourmande pour capturer des données brutes dans un champ.

Utilisez GREEDYDATA:

grok {
  match => { "message" => "\[%{GREEDYDATA:raw_timestamp}\] %{GREEDYDATA:message}" }
  overwrite => [ "message" ]
}
  1. Horodatage analysé. Utilisez le filtre date pour analyser l'horodatage brut.

référence

date {
  match => [ "timestamp", "yyyy/MM/dd HH:mm:ss.S z" ]
  target => "@timestamp"
}
5
Vanuan

Vous pouvez également simplement inclure le modèle joda.time qui est simple et court.

date {
  match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
  target => "@timestamp"
}

Lien utile pour la référence: https://docs.Oracle.com/javase/8/docs/api/Java/time/format/DateTimeFormatter.html

1
Philip

Pour correspondre à 2015/08/30 05:55:20, utilisez:

%{DATESTAMP:mytimestamp}

testé sur Elasticsearch 6.5

Source: https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

0
thiagofalcao