Ad Widget

Collapse

Log file monitoring

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Tomáš Sedláček
    Junior Member
    • Nov 2020
    • 4

    #1

    Log file monitoring

    Dobrý den, chtěl bych se Vás zeptat, zda-li někdo neřešil podobný problém a jakým způsobem se mu ho podařilo vyřešit.

    Zadaní:
    Monitorovat log, ve kterém kontrolovat řádek Login failed usename XX.
    V logu se objevuje spousta dalších jiných řádků.

    Chtěl bych udělat trigger, který se spustí po 5x špatném loginu - tedy 5x řádek s Login fail v logu daného usera.

    řeším tyto problémy:
    Řádek samozřejmě vytáhnu pomocí regexpu to umím. Problém je že kdyby nastala situace, kde se dva lidé špatně přihlásí v podobný čas vzniklo by v logu něco takového
    Login failed XX
    Login Failed YY

    Nenapdá někoho, jak rozlišit tyto řádky a zvlášt jím počítat řádky?

    Měl by se log rozdělit ještě do itemů nebo už rovnou pracovat v konfiguraci triggeru?

    problém 2.
    Je nějakou funkcí možné zajistit, že když se v logu objeví Login sucesfull počítaní začne odznova nebo stím se budu muset spolehnout pouze na časový interval countu?


    Prosím dejte mi vědět, zda-li takové typy dotazů zde mohou být nerad bych špatně reprezentoval naší firmu.

    Důvod proč se ptám zde je ten, že jsem dnes na webináři o tomto forů doslechl a chtěl bych vyzkoušet se zeptat touto cestou nežli neustále "otravovat" kolegy když vím, že řeší důležitější věci.
  • bitboy
    Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • Apr 2014
    • 37

    #2
    Ahoj.


    Problem 1:
    Parsing logov v Zabbixe a ich processing je pomerne obmedzeny. Pocitat pocet vyskytov konkretneho zaznamu mozes cez funkciu count v triggeri, ktora vie vyuzit aj regularny vyraz, takze nie je potrebne vytvarat item pre kazdy username zvlast. Problem celej veci je v tom, ze musis vytvorit trigger (pripadne item) pre kazdeho usera vopred. Je mozne vyuzit LLD nad zdrojom uctov (passwd?).

    Problem 2:
    Tento problem mozes skusit riesit tak, ze trigger bude obsahovat v expression dve podmienky (zapis je len symbolicky na vysvetlenie): count(5m...)>4 and regexp(5m...)=0
    Prva podmienka riesi vyskyt konkretneho zaznamu 5x za definovany casovy interval (Login failed XX) a druha zabezpecuje, ze v danom casovom intervale sa tam nenachadza retazec Login successful XX.
    Tento postup som netestoval, treba vyskusat.

    Je tiez potrebne si premysliet logiku, ktora bude otvorene problemy zatvarat (ak vyzadujes automaticke zatvaranie).


    Existuje vsak aj komplexne riesenie processingu logov pre Zabbix, ktore na tento ucel vyuzivame a umoznuje velmi jednoducho riesit presne to, co potrebujes (problem 1 aj 2) bez nutnosti konfigurovat mnozstvo triggerov a itemov a pouzitia LLD (staci len jeden item/trigger a vsetko ostatne bezi automaticky) - Time Based Correlation modul (TBC). Riesenie umoznuje mnozstvo dalsich veci: aplikacia korelacnych a deduplikacnych pravidla nad log subormi, pocitanie duplikatov, monitoring adresarovych struktur...). Tento produkt sme prezentovali aj na Zabbix webinari. Webinar je k dispozicii na stiahnutie (dolezite slajdy: 38-55).
    Last edited by bitboy; 04-11-2020, 22:44.

    Comment

    • hermanekt
      Member
      Zabbix Certified Trainer
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2019
      • 59

      #3
      Dobry den, Tome,

      reseni je kombinace itemu a triggeru s tagy + event correlation. Je to jen priklad, rychle jsem to zplacal. Takze spis brat tag value, ta bude unikatni a pohrat si s triggery a regulary. Slo mi jen o jasne predani myslenky.

      Tom
      Last edited by hermanekt; 03-11-2020, 14:43.

      Comment


      • bitboy
        bitboy commented
        Editing a comment
        Tomas Hermanek, mala poznamka:

        Tomas Sedlacek, potrebuje pocitat chybne login pokusy pre konkretneho usera a ak ich je viac ako 5 za sebou, tak vygenerovat problem. Toto neriesi globalna korelacia a ani korelacia na urovni triggera,

      • hermanekt
        hermanekt commented
        Editing a comment
        Diky, za upozorneni. Muj spech. Pokud se jedna o statickeho uzivatele, tak bych asi udelal master item a dependent item, kde kazdy dependent bude mit regex na konkretni uzovku. Pak uz jen trigger kde budu resit count(300)>5 takze pokud za 5 min neprojde vice nez 5 prihlaseni. Snad uz jsem to trefil. Pripadne si to poladit na LLD, pro automaticke pridavani novych.

      • bitboy
        bitboy commented
        Editing a comment
        Este drobnost ). 5 chybnych loginov po sebe - cize zlozene expression aj pre nepritomnost uspesneho nalogovania (tak, ako spominam vyssie): count(5m...)>4 and regexp(...)=0
    • Tomáš Sedláček
      Junior Member
      • Nov 2020
      • 4

      #4
      Dobrý den,

      Mockrát vám děkuji za veškeré informace bohužel jsem se k řešení problému dostal až dnes a velmi si cením vašich rad, které jsem při řešení problému použil.

      Momentálně se potýkám s problémem:
      failed login

      V logu:
      Failed login user XX
      Failed login user XX
      Failed login user XX
      Failed login user XX
      ...

      Trigger se správně vygeneruje zachytí tento log pomocí funkce count takže funguje správně.

      Ale momentálně je nastaven ať vygeneruje event pouze jedno = pokud bude nyní failed login user tak už se nespustí. = zapnu Multiple generation

      V logu:
      Failed login user XX
      Failed login user XX
      Failed login user XX
      Failed login user XX

      = Trigger se mi aktivuje třeba 2x 3x (zřejmě tak nějak funguje funkce count ale já nevím jak pořešit, aby se ten trigger pro jednoho usera spustil pouze jedenkrát.

      Zkusil jsem Event corellation tak aby uzavřel nový event s tagem (tak jak popisuje pan Hermanek v obrázcích)

      Výsledek - even se vygeneruje opět několikrát ale nové eventy "RESOLVNE". Je to alespoň nějaké řešení nicméně v Dashobarech tam jsou pak zbytečné řádky resolved navíc.

      Nějaký nápad abych zajistil, aby se to vygenerovalo pro 1 usera pouze 1x?

      Děkuji mockrát.

      Comment

      • bitboy
        Member
        Zabbix Certified Trainer
        Zabbix Certified SpecialistZabbix Certified Professional
        • Apr 2014
        • 37

        #5
        Zdravím,

        V mnou odporúčanej konfigurácii chýba ešte definovanie recovery expression pre vhodné zatváranie problémov. Takže asi takto:

        Z dôvodu použitia funkcie count je nutné vytvoriť trigger pre každého usera zvlášť. Takže napr. pre účty XX, YY, ZZ je nutné vytvoriť 3 triggery s nasledovným expression (opäť symbolicky):
        count(5m,Failed login user XX,regexp)>4 and regexp(Login successful user XX,5m)=0
        count(5m,Failed login user YY,regexp)>4 and regexp(Login successful user YY,5m)=0
        count(5m,Failed login user ZZ,regexp)>4 and regexp(Login successful user ZZ,5m)=0


        Pre každý trigger je nutné vytvoriť aj recovery expression:
        regexp(Login successful user XX)=1
        regexp(Login successful user YY)=1
        regexp(Login successful user ZZ)=1


        Triggery musia byť nastavené v móde Single. V tejto konfigurácii budú počítané výskyty pre každý účet zvlášt a problem sa otvorí vtedy, keď po sebe v intervale 5m aspoň 5x bude pre konkrétneho usera v logu záznam Failed login. Problém sa zatvorí v momente, keď príde záznam Login successful pre konkrétneho usera.

        Nie je riešené:
        • situácia, ak by sa user pokúsil 5x za sebou chybne nalogovať (otvoril by sa problém) a potom by sa už nikdy nepokúšal o login (problém sa nikdy nezavrie). Aj táto situácia sa dá riešiť pomocou samostatných itemov pre každého usera a funkcie nodata, ale nechcem to celé komplikovať. Prípadne, ak bude horeuvedená konfigurácia fungovať, môžem poslať aj postup, ako presne využiť nodata.
        • situácia, ak sa bude user stále dokola chybne prihlasovať. Problém sa vygeneruje len raz, pri prvom dosiahnutí prahového počtu chybných nalogovaní a viac už nie. To je možné čiastočne riešiť módom Multiple pre triggery, ale výsledkom môže byť neustále otváranie problému, ak user bude login realizovať napr. neustále každých 30s. Toto sa opäť dá riešiť deduplikáciou pomocou globálnej korelácie (podobne ako bolo popísané v Tomášovom príspevku).

        Uvedenú konfiguráciu som netestoval. Ak by však bol problém, daj vedieť.

        Comment

        • Tomáš Sedláček
          Junior Member
          • Nov 2020
          • 4

          #6
          Dobrý den,

          děkuji Vám za vaší odpověď.

          Ano toto řešení které uvadíte máte pravdu by fungovalo přesně podle potřeb.

          Nicméně se chceme vyvarovat vytváření itemů a triggerů pro specifické usery a tahat si to z regular expression. Dnes jsem nad tím strávil čas a bohužel jsem se takhle nedobral k žádnému výsledku a já nevím jestli to prostě není realizovatelné a nebo jen nad tím přemýšlím špatně, a proto jsem se pokusil tento problém sdílet tady.

          Vaše řešení samozřejmně funguje a může ho využít někdo, kdo má pár userů a nepotřebuje problémy řešit obecně.

          Děkuji.

          Comment

          • bitboy
            Member
            Zabbix Certified Trainer
            Zabbix Certified SpecialistZabbix Certified Professional
            • Apr 2014
            • 37

            #7
            Zdravím,

            itemy a triggery je možné generovať automaticky cez LLD, nemusíte ich robiť ručne. Účtov tak kľudné môžu byť stovky (triggery sa vytvoria automaticky) a môžu byť uložené v rozličných zdrojoch. Je len potrebné vytvoriť LLD rule a prototyp triggera, čo je relatívne jednoduché - skript, ktorý prevedie váš zdroj účtov do podoby JSON štruktúry vhodnej pre LLD proces a následné generovanie triggerov z prototypu.

            Okrem toho som spomínal riešenie, ktoré rieši túto situáciu pomocou jedného triggera a itemu pre ľubovoľný počet userov bez nutnosti používať LLD. V mojom prvom príspevku je linka na webinár na túto tému.

            Comment

            • homer
              Junior Member
              • Dec 2020
              • 2

              #8
              A co jit na to od lesa....
              Nastavit na user accountu ruli, ze po x fail loginech se userovi lockne account.
              Potom by stacilo odchytavat v logu string "account xxx was locked".
              Pozitiva reseni: jednodussi monitoring a vychova useru ;-)

              Comment

              Working...