Graylog: Duomenų atvaizdavimo problemos

Kaip išspręsti Graylog indekso duomenų atvaizdavimo problemas

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti Graylog cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:

  • Įtrauktas neribotas ir dedikuotas SMTP el. pašto serveris.
  • Lengvi atnaujinimai vienu paspaudimu.
  • Pritaikomas domeno vardas, apsaugotas HTTPS (pavyzdžiui, https://logs.jusu-imone.com).
  • Optimali veikla ir tvirta sauga, užtikrinta privačia ir dedikuota VM.

Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių, kad išbandytumėte Stackhero Graylog cloud hosting sprendimą!

Viena iš dažniausiai pasitaikančių Graylog problemų yra duomenų atvaizdavimo (mapping) konfliktai, dėl kurių gali nepavykti indeksuoti duomenų. Su šia problema galite susidurti, jei žurnaluose matote tokius įrašus:

ElasticsearchException[Elasticsearch exception [type=mapper_parsing_exception, reason=failed to parse field [level] of type [long] in document with id '34fd4d11-36ed-11f0-afc9-0242ac140002'. Preview of field's value: 'error']]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=For input string: "error"]];

Ši problema kyla dėl OpenSearch dinaminio atvaizdavimo (dynamic mapping) funkcijos. Dinaminis atvaizdavimas automatiškai nustato kiekvieno lauko duomenų tipą pagal pirmąjį į indeksą įrašytą dokumentą. Nustačius duomenų tipą, jis tampa „užrakintas“, ir visi vėlesni dokumentai, kuriuose tas laukas turi kitokį duomenų tipą, bus atmesti, sukeldami mapper parsing exception klaidą.

Kai sukuriamas naujas indeksas, pirmasis dokumentas apibrėžia indekso atvaizdavimą. Pavyzdžiui, jei dokumente yra laukas „level“ su verte 3 (skaitinė reikšmė), OpenSearch nustato „level“ duomenų tipą kaip „long“ (skaitinis tipas). Jei vėliau į Graylog siunčiamame dokumente laukas „level“ bus „error“ (tekstinis tipas), toks dokumentas bus atmestas, nes duomenų tipas nesutampa su pradiniu. Tokiu atveju bus išmesta mapper_parsing_exception klaida su priežastimi failed to parse field [level] of type [long] in document with id 'xxx'.

Ši problema gali kilti su bet kuriuo lauku, jei dokumentuose naudojami nesuderinami duomenų tipai.

Yra du būdai, kaip išspręsti šią problemą:

Idealiausias sprendimas – standartizuoti laukų duomenų tipus visose sistemose, siunčiančiose duomenis į Graylog. Pavyzdžiui, užtikrinkite, kad laukas „level“ visada būtų siunčiamas kaip tekstas (pvz., „error“, „warn“ ir pan.) arba visada kaip skaičius (3, 4 ir t. t.). Tokia nuoseklumas padeda išvengti atvaizdavimo konfliktų ir užtikrina, kad visi dokumentai būtų tinkamai įkelti.

Jei standartizuoti duomenų tipus visose sistemose nėra galimybės, galite naudoti Graylog pipelines funkcionalumą duomenų tipams konvertuoti gavimo metu. Pipelines leidžia apibrėžti taisykles, kurios transformuoja duomenis pagal tam tikras sąlygas.

Norėdami įgyvendinti šį sprendimą:

  • Eikite į „System“ > „Pipelines“ Graylog žiniatinklio sąsajoje.
  • Spauskite „Add new pipeline“, kad sukurtumėte naują pipeline.
  • Apibrėžkite taisykles, kurios konvertuoja lauką „level“ (ar kitus laukus) į norimą duomenų tipą. Pavyzdžiui, galite konvertuoti skaitinius lygius į atitinkamas tekstines reikšmes (pvz., 3 į „error“, 4 į „warning“ ir pan.).

Šis metodas užtikrina, kad visi gaunami duomenys atitiktų tikėtinus duomenų tipus ir išvengtumėte atvaizdavimo konfliktų.

Patyrusiems naudotojams Graylog suteikia galimybę peržiūrėti ir rankiniu būdu koreguoti indeksų atvaizdavimą:

  • Eikite į „System“ > „Indices“ Graylog žiniatinklio sąsajoje.
  • Pasirinkite reikiamą indeksą.
  • Eikite į „Configuration“ > „Configure index field types“, kad peržiūrėtumėte arba pakeistumėte laukų atvaizdavimą.

Tačiau rankinius pakeitimus reikia atlikti atsargiai, nes neteisingas atvaizdavimas gali sukelti papildomų duomenų įkėlimo problemų.