किसी फ़ाइल को वापस करने के लिए लॉगस्टैश को कैसे मजबूर करें?


91

मैंने अपाचे फ़ाइलों को पार्स करने के लिए लॉगस्टैश स्थापित किया। सेटिंग्स सही होने में मुझे काफी क्यू लगा और मैंने हमेशा असली लॉग पर कोशिश की। मैंने देखा (जैसा कि प्रलेखन कहता है) कि लॉगस्टैश "याद" करता है, जहां यह एक फ़ाइल में था। अब मेरे सेट ठीक हैं और मैं लॉगस्टैश को "भूलना" चाहूंगा। यह मुझे हालांकि कठिन लगता है। मैंने पहले ही निम्न कार्य किया था:

  • उपयोग किया गया: start_position => "beginning"

  • इलास्टिसर्च से पूरा "डेटा" फ़ोल्डर हटा दिया (और इसे पहले बंद कर दिया)

  • लॉगस्टैश द्वारा खोली गई फ़ाइलों को किसके साथ lsof -p PIDदेखा गया था और वह सब कुछ हटा दिया गया था जो आशाजनक था (मेरे मामले में /tmp/jffi*.tmp)

फिर भी लॉगस्टैश फ़ोल्डर में केवल "ताज़ा" फ़ाइलों को नहीं भूलता और पार्स करता है जहां लॉग होते हैं

कोई विचार?


नवीनतम लॉगस्टैश संस्करण मुझे इसमें मिला:/opt/logstash/data/plugins/inputs/file
टिम स्मिथ

जवाबों:


135

डिफ़ॉल्ट रूप से लॉगस्टैश लिखता है कि स्थिति अंतिम है एक लॉगफ़ाइल पर जो आमतौर पर रहता है $HOME/.sincedb। Logstash को यह विश्वास दिलाकर मूर्ख बनाया जा सकता है कि उसने कभी भी logfile को निर्दिष्ट नहीं /dev/nullकिया sincedb_path

यहाँ प्रलेखन इनपुट फ़ाइल का हिस्सा है ।

कहाँ से डेटाबेस लिखने के लिए (मॉनिटर लॉग फ़ाइलों की वर्तमान स्थिति का ट्रैक रखता है)। पर्यावरण चर "$ SINCEDB_PATH" या "$ HOME / .sincedb" के मान में कमी।

विन्यास उदाहरण

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}

28
खिड़कियों पर आप sincedb_path => "NUL"एक ही प्रभाव प्राप्त करने के लिए उपयोग कर सकते हैं । Detailes यहाँ
क्रिस मेग्नुसन

11
यदि फाइलें काफी पुरानी हैं (अधिक है तो 24h) विकल्प जोड़ने के लिए बहुत उपयोगी है, ingnore_older => 0इसलिए लॉगस्टैश उन्हें तारीख की कोई बात नहीं ले जाएगा। डिफ़ॉल्ट रूप से यदि फाइलें अधिक पुरानी हैं तो 24h को नजरअंदाज कर दिया जाएगा।
mtfk

1
@mtfk: वाह कमाल ढूंढो! ignore_older => 0Logstash में बाहर काम करने के लिए धन्यवाद ! मुझे प्रश्नकर्ता के रूप में एक ही समस्या ने जाम कर दिया है। एक गैर-स्पष्ट लगता है! (googling "ign_older" और "logstash" केवल फ़ाइलबीट पर पेज लाते हैं, मुझे इस बात का कोई भी पता नहीं चल पाया कि लॉगस्टैश में इससे कैसे निपटा जाए)
माइक लुत्ज़

फ़ाइलबीट का उपयोग करते समय इसे कैसे जोड़ें
सुनीलकुमार राममूर्ति

@SunilkumarRamamurthy मेरा मानना है कि यदि आप विकल्प को छोड़ ignore_olderअपने filebeat विन्यास में, filbeat फिर से पूरी फ़ाइल को पढ़ने के लिए मजबूर किया जाता है elastic.co/guide/en/beats/filebeat/current/...
flazzarini

19

"फ़ाइलिंग" का प्लगइन फ़ाइल स्टोर इतिहास, पाप्डेब फाइल में, डिफ़ॉल्ट: $ HOME / .sincedb * के तहत, http://logstash.net/docs/1.3.3/inputs/file#sincedb_path देखें

चूंकि db फाइल में लाइन लुक होता है जैसे:

[inode] [major device number] [minor device number] [byte offset]

इसलिए, यदि आप एक पूर्ण फ़ाइल फिर से पार्स करना चाहते हैं, तो आपको निम्न करने की आवश्यकता है:

  • sindedb फ़ाइलों को हटाएं
  • या केवल sincedb फ़ाइल में संबंधित लाइन हटाएं, अपनी फ़ाइल से पहले इनकोड नंबर जांचें ( ls -i yourFile | awk '{print $1}')
  • और लॉगस्टैश को पुनरारंभ करें

कुंजी के साथ start_position => "beginning", लॉगस्टैश सभी फाइल का विश्लेषण करेगा।

एक sincedb फ़ाइल का उदाहरण:


1
start_position => "beginning"दस्तावेज़ के बारे में , कहते हैं:> यह विकल्प केवल "पहले संपर्क" स्थितियों को संशोधित करता है जहां एक फ़ाइल नई है और पहले नहीं देखी गई है। यदि कोई फ़ाइल पहले ही देखी जा चुकी है, तो इस विकल्प का कोई प्रभाव नहीं पड़ता है।
ब्रैड

10

लॉगस्टैश रिकॉर्ड को अंदर रखेगा $HOME/.sincedb_*। आप सभी को हटा सकते हैं .sincedbऔर लॉगस्टैश को पुनः आरंभ कर सकते हैं , लॉगस्टैश फ़ाइल को फिर से अपडेट करेगा।


9

सभी उत्तरों को मिलाकर, अनुमान लगाएं कि यह फाइलों को पार्स करने का सबसे अच्छा तरीका है। मैंने अपने परीक्षण के लिए भी यही किया।

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

एक त्वरित परीक्षण के लिए, इसके बजाय ignore_older, आप touch /tmp/access_logफ़ाइल का टाइमस्टैम्प भी बदल सकते हैं ।


इस बात से अवगत रहें कि विन्यास जोड़ने ignore_older => 0से विपरीत होगा।
पंचकोशी

5

यदि आप लॉगस्टैश-फारवर्डर का उपयोग कर रहे हैं, तो .logstash-forwarderइसके बजाय फ़ाइल के लिए अपने घर की जाँच करें :

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}

3
यदि पैकेज के रूप में स्थापित किया गया है, तो जांच करें /var/lib/logstash-forwarder/
वेस्ले बाउ

3

$HOME/.sincedb_*इसे हटाने के बाद अभी भी मेरे लिए डेटा अंतर्ग्रहण नहीं किया गया था।

चीजों की एक गुच्छा की कोशिश करने के बाद मैंने सभी मुख्य .confफ़ाइल को हटा दिया /etc/logstash/conf.dऔर लॉगस्टैश को फिर से शुरू किया, और सब कुछ काम किया। मैं केवल यह मान सकता हूं .confकि फाइलों में से एक में कुछ था जो लॉगस्टैश चुपचाप लटका हुआ था।


जैसा कि मुझे याद है, मैंने बाद में कुछ डिबगिंग झंडे को चालू किया और इसने मुझे बताया कि यह चुपचाप लटकने के बजाय गुस्सा क्यों था। मुझे लगता है कि यह डेटा में एक संस्करण संख्या की तलाश में था लेकिन कभी-कभी डेटा में एक संख्या नहीं होती थी। यह पता लगाने के लिए कि नंबर क्या था अगर यह एक नंबर नहीं था तो दुर्घटनाग्रस्त हो जाएगा, इसलिए मुझे पहले परीक्षण करना था कि यह एक नंबर है, फिर पूछें कि यह कौन सा नंबर था।
सेठ

1

दरअसल हर बार रिपेयर करना बहुत महंगा पड़ता है अगर फाइल में बड़ा डेटा हो। इसलिए आपको ऐसा करने से पहले सावधान रहने की जरूरत है। यदि हम इसे फिर से तैयार करने के लिए मजबूर करना चाहते हैं तो इनपुट ब्लॉक के अंदर पैरामीटर सेट करें

sincedb_path => "/dev/null" 

यह विकल्प .sincedb फ़ाइल को संग्रहित नहीं करेगा और लॉगस्टैश प्रत्येक बार पुनः स्थापित होगा। लेकिन अगर आप हर बार कभी-कभार नहीं चाहते हैं, तो आप क्या कर सकते हैं कि मैन्युअल रूप से .sinceDb पथ को हटा दें जो फ़ाइल को पार्स करने पर बनाया गया है। आम तौर पर यह होम डाइरेक्टरी में एक छुपी हुई फाइल के रूप में मौजूद होता है यदि आप रूट यूजर नहीं हैं तो रूट डायरेक्टरी में हैं। आप इस फाइल को आसानी से ट्रेस करने के लिए sincedb_path को किसी अन्य स्थान पर भी सेट कर सकते हैं।

sincedb_path => "/home/shubham/sinceDB/productsSince.db"

1

यदि आप लॉगस्टैश विकल्पों के साथ खिलवाड़ करने से बचना चाहते हैं, तो मैंने पाया है कि मौजूदा लॉग फ़ाइल का नाम बदलना या हटाना और पुरानी फ़ाइल सामग्री से एक नई फ़ाइल बनाने से लॉगस्टैश फिर से अनुक्रमणिका में बदल जाएगा।


0

मैंने इसे अपने घर में पाया। लेकिन इसे हटाने के बाद, लॉगस्टैश ने मौजूदा लॉग फ़ाइलों को फिर से चुनने से इनकार कर दिया। जिस तरह से मुझे काम करने के लिए मिला था वह जोड़ना था

sincedb_path => "/opt/elk/sincedb/"  

मेरे फ़ाइल प्लगइन के लिए। मैं हर बार रीसेट करने के बारे में सोचता हूं, बस sincedb_path का रास्ता बदल देता हूं


0

यदि आप tar.gz इंस्टॉल फ़ाइलबीट का उपयोग करते हैं, तो आप इस फ़ाइल को हटा सकते हैं $FilebeatPath/data/registry/filebeat/data.json, और फ़ाइलबीट को फिर से चलाएँ



-1

logstash संस्करण 5 नई निर्देशिका में है

<path.data>/plugins/inputs/file

path.data परिभाषा logstash.yml में है

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