2013-08-20 6 views
76

मान लीजिए कि आप इस तरह के तकनीकी और व्यावसायिक लॉग के रूप में लॉग के 2 बहुत अलग अलग प्रकार है और आप चाहते हैं:लॉगस्टैश के साथ कई विषम इनपुट कैसे प्रबंधित करें?

  • कच्चे तकनीकी लॉग एक gelf उत्पादन का उपयोग कर एक graylog2 सर्वर की ओर से कराई जा,
  • json व्यापार लॉग संग्रहीत किया समर्पित elasticsearch_http आउटपुट का उपयोग करके एक लोचदार क्लस्टर में।

मुझे पता है कि उदाहरण के लिए Syslog-NG साथ, विन्यास फाइल कई अलग आदानों जो तब भेजा जा रहा से पहले अलग से संसाधित किया जा सकता परिभाषित करने के लिए अनुमति देते हैं; Logstash क्या करने में असमर्थ लगता है। यहां तक ​​कि यदि एक उदाहरण दो विशिष्ट विन्यास फाइलों के साथ शुरू किया जा सकता है, तो सभी लॉग एक ही चैनल लेते हैं और उसी प्रक्रियाओं को लागू किया जा रहा है ...

क्या मुझे कई उदाहरण चलाना चाहिए क्योंकि मेरे पास विभिन्न प्रकार के लॉग हैं?

+0

आप बेन लिम का सही जवाब को स्वीकार करना चाहिए! –

उत्तर

163

क्या मुझे कई उदाहरण चलाना चाहिए क्योंकि मेरे पास विभिन्न प्रकार के लॉग हैं?

नहीं! आप विभिन्न प्रकार के लॉग को संभालने के लिए केवल एक उदाहरण चला सकते हैं।

लॉगस्टैश कॉन्फ़िगरेशन फ़ाइल में, आप अलग-अलग type के साथ प्रत्येक इनपुट को विशिष्ट कर सकते हैं। फिर फ़िल्टर में आप अलग-अलग प्रसंस्करण, पर आउटपुट पर if का उपयोग कर सकते हैं और आउटपुट पर भी आप "if" आउटपुट को विभिन्न गंतव्य पर उपयोग कर सकते हैं।

input { 
    file { 
      type => "technical" 
      path => "/home/technical/log" 
    } 
    file { 
      type => "business" 
      path => "/home/business/log" 
    } 
} 
filter { 
    if [type] == "technical" { 
      # processing ....... 
    } 
    if [type] == "business" { 
      # processing ....... 
    } 
} 
output { 
    if [type] == "technical" { 
      # output to gelf 
    } 
    if [type] == "business" { 
      # output to elasticsearch 
    } 
} 

आशा इस मदद कर सकता है :)

+1

आप फिल्टर प्रकार और आउटपुट परिभाषाओं में 'टाइप' विशेषता' (उसी प्रकार के प्रकार => "मान" सिंटैक्स के साथ भी उपयोग कर सकते हैं जो कॉन्फ़िगरेशन फ़ाइल के भीतर अतिरिक्त स्वरूपण पर कटौती करनी चाहिए। उदाहरण: https://gist.github.com/fairchild/3030472 प्रति दस्तावेज: इस इनपुट द्वारा प्रबंधित सभी घटनाओं में 'प्रकार' फ़ील्ड जोड़ें। प्रकार मुख्य रूप से फिल्टर सक्रियण के लिए उपयोग किए जाते हैं। प्रकार को ईवेंट के हिस्से के रूप में संग्रहीत किया जाता है, ताकि आप वेब इंटरफ़ेस में इसे खोजने के लिए प्रकार का उपयोग भी कर सकें। –

+5

ठीक है, ऐसा लगता है कि बेन प्रदान किया गया वास्तव में ऐसा करने का नया तरीका है। जब मैंने आउटपुट में 'type => "value" 'का उपयोग किया, तो मुझे निम्न संदेश प्रदर्शित हुआ:" आप stdout में सेट एक बहिष्कृत कॉन्फ़िगरेशन सेटिंग "प्रकार" सेट का उपयोग कर रहे हैं। बहिष्कृत सेटिंग्स काम करना जारी रखेगी, लेकिन इसे हटाने के लिए निर्धारित हैं भविष्य में लॉगस्टैश। आप इस कंडीशन को नई सशर्तताओं के साथ प्राप्त कर सकते हैं, जैसे: 'if [type] == "sometype" {stdout {...}} '। मैं अपनी पिछली टिप्पणी वापस लेता हूं। :) –

+1

यह स्वीकार्य उत्तर होना चाहिए। – w00t

0

मुझे लगता है कि logstash इनपुट अनुभाग में अधिक से अधिक 2 फ़ाइलें नहीं पढ़ सकता। कोशिश नीचे

input { 
    file { 
      type => "technical" 
      path => "/home/technical/log" 
    } 
    file { 
      type => "business" 
      path => "/home/business/log" 
    } 
file { 
      type => "business1" 
      path => "/home/business/log1" 
    } 
} 
2

मैं एकाधिक फ़ाइल इनपुट के लिए टैग का उपयोग किया:

input { 
    file { 
     type => "java" 
     path => "/usr/aaa/logs/stdout.log" 
     codec => multiline { 
      ... 
     }, 
     tags => ["aaa"] 
    } 

    file { 
     type => "java" 
     path => "/usr/bbb/logs/stdout.log" 
     codec => multiline { 
       ... 
     } 
     tags => ["bbb"] 
    } 
} 
output { 
    stdout { 
     codec => rubydebug 
    } 
    if "aaa" in [tags] { 
     elasticsearch { 
      hosts => ["192.168.100.211:9200"] 
      index => "aaa" 
      document_type => "aaa-%{+YYYY.MM.dd}" 
     } 
    } 

    if "bbb" in [tags] { 
     elasticsearch { 
      hosts => ["192.168.100.211:9200"] 
      index => "bbb" 
      document_type => "bbb-%{+YYYY.MM.dd}" 
     } 
    } 
} 
संबंधित मुद्दे