लॉगस्टैश के साथ कई विषम आदानों को कैसे संभालना है?


95

मान लें कि आपके पास तकनीकी और व्यावसायिक लॉग जैसे 2 बहुत भिन्न प्रकार के लॉग हैं और आप चाहते हैं:

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

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

क्या मुझे विभिन्न प्रकार के लॉग के रूप में चलना चाहिए?


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

जवाबों:


191

क्या मुझे विभिन्न प्रकार के लॉग के रूप में चलना चाहिए?

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

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

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

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

ध्यान दें कि typeयदि इनपुट से एक प्रकार का फ़ील्ड पहले से है तो विशेषता लागू नहीं होगी। यह एक विशेष गुण है जो ओवरराइड नहीं करता है और यह प्रलेखित है। मैं लचीला में एक टिकट खोल दिया है और वे मेरे सिफारिश उपयोग करने के लिए tagsया add_fieldके बजायtype
BornToCode

@BornToCode, मुझे काफी समझ नहीं है। क्या आप कह रहे हैं कि बेन के कोड में कुछ गड़बड़ है? या अगर यह लॉग पथ एक ही फ़ाइल थे तो यह काम नहीं करेगा? ऐसा परिदृश्य क्या है जहाँ यह काम नहीं करता है?
बेन व्हीलर

2
@BenLim ओपी ने आपके उत्तर को स्वीकार नहीं किया, लेकिन मैंने इसे सबसे अधिक मददगार और अप-वोट दिया।
बिगबैडमहाउस

15

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

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

यह स्वीकृत उत्तर से बेहतर है: यह लॉगस्टैश में कई फाइलबीट इनपुट की अनुमति देता है। ऐसे मामलों में, "प्रकार" संपत्ति "लॉग" पर सेट होती है और इसे संशोधित नहीं किया जा सकता है।
रेगीस बी।

लेकिन क्या यह आखिरी टैग (bbb) के साथ ओवरराइटिंग टैग नहीं है? और फिर फिर से, अगर स्टेटमैट में, यदि टैग एक सरणी या एकल स्ट्रिंग थे, तो दोनों IF के काम करेंगे। तो तार्किक रूप से यह गलत है, लेकिन हो सकता है कि लॉगस्टैश के अंदर एक अलग तर्क हो
meso_2600

0

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

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

हाँ, एक ही 'इश्यू' में भाग लें
meso_2600
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.