Utilisation de Log4J avec LogStash
Je suis nouveau sur LogStash. J'ai quelques journaux écrite à partir d'une application Java dans Log4J. Je suis en train d'essayer d'obtenir ces journaux dans ElasticSearch. Pour la vie de moi, je n'arrive pas à le faire fonctionner de manière cohérente. Actuellement, je suis en utilisant la suite de logstash configuration:
input {
file {
type => "log4j"
path => "/home/ubuntu/logs/application.log"
}
}
filter {
grok {
type => "log4j"
add_tag => [ "ApplicationName" ]
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ]
}
}
output {
elasticsearch {
protocol => "http"
codec => "plain"
host => "[myIpAddress]"
port => "[myPort]"
}
}
Cette configuration semble être frappé ou manquer. Je ne sais pas pourquoi. Par exemple, j'ai deux messages. L'un travaille, l'autre jette un analyser l'échec. Pourtant, je ne suis pas sûr pourquoi. Voici les messages et leurs résultats respectifs:
Tags Message
------ -------
["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2-
thread-6] message was null from https://domain.com/id-1/env-
MethodName
["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2-
thread-4] message was null from https://domain.com/id-1/stable-
MethodName
Celle avec ["ApplicationName"] a mon champs personnalisés de timestamp
et level
. Cependant, l'entrée avec ["_grokparsefailure"] ne PAS avoir mes champs personnalisés. L'étrange pièce, les journaux sont presque identiques, comme indiqué dans la colonne message ci-dessus. C'est vraiment déroutant de moi, et pourtant, je ne sais pas comment comprendre quel est le problème ou comment obtenir de l'au-delà. Quelqu'un sait-il comment comment je peux l'utiliser à l'importation log4j journaux en logstash et d'obtenir les champs suivants de façon uniforme:
- Niveau De Journal
- Timestamp
- Message de journal
- Nom De La Machine
- Fil
Merci pour toute aide que vous pouvez fournir. Même si je peux juste le niveau de journal, timestamp, et le message de log, qui serait d'une grande aide. J'apprécie sincèrement!
- je ne vois pas comment votre grok modèle de matchs. Vous avez deux espaces avant les %{LOGLEVEL:niveau}". Si vous avez à traiter avec un nombre variable d'espaces, utilisez \s+ à la place des espaces pour correspondre à un ou plusieurs espaces. Et +1 sur le grok débogueur répondre
Vous devez vous connecter pour publier un commentaire.
Je vous recommande d'utiliser le log4j prise écouteur pour logstash et la log4j socket appender.
Logstash conf:
log4j.propriétés:
Il n'y a plus d'infos dans la logstash docs pour leur log4j d'entrée: http://logstash.net/docs/1.4.2/inputs/log4j
[logstash_host]
être localhost? nous avons à spécifier l'adresse ip ou le nom d'hôte peut suffire?Sur mon blog J'ai décrit comment envoyer JSON message(s) pour le ElasticSearch et ensuite analyser avec GROK.
Cliquez pour voir le post de blog avec la description et exemple Java
Dans le post, vous trouverez la description, mais aussi simple projet maven avec exemple (complète du projet sur github).
Espère que cela vous aide.
Il ressemble à la SocketAppender solution qui a été utilisée avant est déconseillée en raison de certains problèmes de sécurité.
Actuellement, la solution recommandée consiste à utiliser log4j fileAppender et ensuite transmettre le fichier par l'intermédiaire de filebeat plugin pour logstash et puis filtrer.
Pour plus d'informations, vous pouvez consulter les liens ci-dessous:
https://www.elastic.co/blog/log4j-input-logstash
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html