2014-04-04 5 views
23

के साथ Log4J का उपयोग कर मैं लॉगस्टैश के लिए नया हूं। मेरे पास Log4J में जावा एप्लिकेशन से कुछ लॉग लिखा गया है। मैं उन लॉग को ElasticSearch में प्राप्त करने की कोशिश करने की प्रक्रिया में हूं। मेरे जीवन के लिए, मैं इसे लगातार काम करने के लिए प्रतीत नहीं कर सकता। वर्तमान में, मैं निम्नलिखित लॉगस्टैश कॉन्फ़िगरेशन का उपयोग कर रहा हूं:LogStash

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]" 
    } 
} 

यह कॉन्फ़िगरेशन हिट या मिस लगता है। मुझे यकीन नहीं है क्यों। उदाहरण के लिए, मेरे पास दो संदेश हैं। एक काम करता है, और दूसरा एक पार्स विफलता फेंकता है। फिर भी, मुझे यकीन नहीं है क्यों।

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 

[ "ApplicationName"] timestamp और level की मेरी कस्टम फ़ील्ड है के साथ एक: यहाँ संदेशों और उनके संबंधित परिणाम हैं। हालांकि, ["_grokparsefailure"] के साथ प्रविष्टि में मेरे कस्टम फ़ील्ड नहीं हैं। अजीब टुकड़ा यह है कि लॉग ऊपर के संदेश कॉलम में दिखाए गए लगभग समान हैं। यह वास्तव में मुझे भ्रमित कर रहा है, फिर भी, मुझे नहीं पता कि समस्या क्या है या इससे आगे कैसे निकलना है।

  • लॉग स्तर
  • टाइमस्टैम्प
  • लॉग संदेश
  • मशीन नाम
  • थ्रेड
: किसी को कैसे मैं logstash में आयात log4j लॉग का उपयोग करें और निम्नलिखित क्षेत्रों में लगातार प्राप्त कर सकते हैं कैसे पता है

आपके द्वारा प्रदान की जा सकने वाली किसी भी मदद के लिए धन्यवाद। यहां तक ​​कि अगर मैं सिर्फ लॉग स्तर, टाइमस्टैंप, और लॉग संदेश कर सकता हूं, तो यह एक बड़ी मदद होगी। मैं ईमानदारी से इसकी सराहना करता हूं!

+3

मैं नहीं देख सकते हैं कि कैसे अपनी grok पैटर्न कभी मेल खाता है आपके पास% {LOGLEVEL: level} "से पहले दो रिक्त स्थान हैं। यदि आपको रिक्त स्थान की एक चरणीय संख्या से निपटना है, तो एक या अधिक रिक्त स्थान से मेल खाने के लिए रिक्त स्थान के बजाय \ s + का उपयोग करें। और ग्रोक डीबगर उत्तर – Alcanzar

उत्तर

1

On my blog मैंने वर्णन किया कि कैसे एलोनिक संदेश को JSasticSearch में भेजना है और फिर इसे GROK के साथ पार्स करना है। Click to see blog post with description and Java example पोस्ट में आपको विवरण मिलता है लेकिन उदाहरण (गीथब पर पूरी परियोजना) के साथ सरल मेवेन प्रोजेक्ट भी मिलता है।

उम्मीद है कि यह आपकी मदद करता है।

22

मैं लॉगस्टैश और log4j सॉकेट एपेंडर के लिए log4j सॉकेट श्रोता का उपयोग करने की सलाह दूंगा।

Logstash conf:

input { 
    log4j { 
    mode => server 
    host => "0.0.0.0" 
    port => [logstash_port] 
    type => "log4j" 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

log4j.properties:

log4j.rootLogger=[myAppender] 
log4j.appender.[myAppender]=org.apache.log4j.net.SocketAppender 
log4j.appender.[myAppender].port=[log4j_port] 
log4j.appender.[myAppender].remoteHost=[logstash_host] 

वहाँ उनके log4j इनपुट के लिए logstash डॉक्स में अधिक जानकारी है: http://logstash.net/docs/1.4.2/inputs/log4j

+0

पर +1 आपके जैसा ही अनुशंसा करें, लेकिन अभी, मुझे समस्याएं शुरू हो रही हैं जब संदेश भेजने की मात्रा काफी बड़ी है। ध्यान रखें कि log4j एक टीसीपी कनेक्शन से घटनाओं को पढ़ता है। – alicia

+0

मुझे लगता है कि log4j.properties फ़ाइल में log4j_port logstash_port होना चाहिए। – imesh

+0

'[logstash_host]' को स्थानीयहोस्ट होना चाहिए? क्या हमें आईपी निर्दिष्ट करना है या मेजबाननाम पर्याप्त है? – AbtPst

संबंधित मुद्दे