Graylog: Naudojimas su Python

Kaip siųsti žurnalus iš Python į Graylog

👋 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ą!

Žurnalų siuntimas iš Python į Graylog yra paprastas. Šiame pavyzdyje naudosime paketus graypy ir logging, kad tai pasiektume.

Graylog pusėje reikia sukurti GELF TCP įvestį.

Eikite į savo Graylog administravimo skydelį, tada „System“/„Inputs“ ir sukurkite naują „GELF TCP“ įvestį. Pažymėkite „global“ langelį, pridėkite „title“ ir įsitikinkite, kad prievadas nustatytas į 12201.

Čia neaktyvuokite jokios TLS parinkties. TLS šifravimą tvarkys jūsų instancijoje įtrauktas atvirkštinis tarpinis serveris.

Įvesties konfigūracijaĮvesties konfigūracija

Stackhero prietaisų skydelyje eikite į savo Graylog paslaugą ir spustelėkite „Configure“.

Įsitikinkite, kad TCP prievadas 12201 yra tinkamai apibrėžtas ir įgalinkite „TLS encryption“ jam, tada patvirtinkite savo konfigūraciją.

Įvesties prievado konfigūracijaĮvesties prievado konfigūracija

Turėtumėte patikrinti savo paslaugos „Firewall“, kad leidote bent savo IP siųsti duomenis į TCP prievadą 12201. Testavimo tikslais gali būti lengviau leisti visus IP (0.0.0.0/0), kas yra numatytasis nustatymas.

Šiam pavyzdžiui naudosime graypy biblioteką. Ją galite tiesiog įdiegti su pip install graypy.

Tada galite parašyti šį kodą faile, pavadintame graylog-example.py, ir pakeisti XXXXX.stackhero-network.com savo serverio pavadinimu:

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

my_logger.debug('Tai yra testas iš Python skripto!')

Eikite į savo Graylog administravimo skydelį, spustelėkite „Search“ skirtuką, spustelėkite grojimo piktogramą ir pasirinkite „Update every 1 second“. Tada galite paleisti skriptą naudodami šią komandą: python graylog-example.py.

Skriptas išsiųs žurnalą į Graylog, ir jūs turėtumėte jį matyti savo Graylog paieškos puslapyje!

Jūsų pirmasis žurnalas gautas GraylogJūsų pirmasis žurnalas gautas Graylog

Spustelėkite sakinį „Tai yra testas iš Python skripto!“ ir pamatysite naudingą informaciją, kaip skripto pavadinimas, eilutė, kuri sukuria žurnalą, ir kt.

Išsamus žurnalasIšsamus žurnalas

Naudinga funkcija yra sugauti klaidas ir siųsti jas į Graylog, kad turėtumėte bendrą vaizdą apie jūsų programos sukeltas klaidas. Jūs netgi galėsite siųsti pranešimus apie tokias klaidas el. paštu arba naudodami Slack ar Mattermost.

Šiame pavyzdyje bandome iškviesti funkciją unknown_function, kuri neegzistuoja. Nepamirškite pakeisti vertės „XXXXX.stackhero-network.com“ savo instancijos pavadinimu.

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

try:
  unknown_function()
except NameError:
  my_logger.debug('Funkcija "unknown_function" sukėlė klaidą', exc_info=1)

Paleiskite skriptą ir grįžkite į savo Graylog administravimo skydelį. Pamatysite klaidą „NameError: name 'unknown_function' is not defined“ ir visą klaidos seką!

Klaidos žurnalo pavyzdysKlaidos žurnalo pavyzdys

Ankstesniuose pavyzdžiuose naudojome TLS šifruoti komunikaciją, bet netikrinome sertifikato galiojimo. Tai buvo demonstraciniais tikslais, bet gamybai turėtumėte patikrinti sertifikato galiojimą.

Tai galite padaryti paprasčiausiai pridėdami parinktis validate ir ca_certs taip:

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')

Turėtumėte įsitikinti, kad failas /etc/ssl/certs/ca-certificates.crt egzistuoja:

  • Ubuntu/Debian galite jį įdiegti su sudo apt install ca-certificates.
  • Alpine Linux įdiekite jį su apk add ca-certificates.
  • macOS jis įdiegtas pagal numatymą, bet pavadintas /etc/ssl/cert.pem.

Jei negaunate žurnalų savo Graylog, galbūt norėsite patikrinti šiuos punktus:

  1. Graylog turėtų turėti apibrėžtą įvestį tipo „GELF TCP“, klausantį prievado 12201, be jokios TLS konfigūracijos.
  2. Graylog konfigūracija Stackhero prietaisų skydelyje (mygtukas „Configure“) turėtų turėti prievadą 12201 apibrėžtą, su TCP ir TLS aktyvuotais „Input ports“.
  3. Stackhero prietaisų skydelio užkarda turėtų rodyti prievadą „12201/tcp“ kaip „ACCEPT“, idealiai pirmoje pozicijoje su šaltiniu 0.0.0.0/0 apibrėžtu (testavimo tikslais).
  4. Turėtumėte stebėti žurnalus savo Graylog administravimo skydelyje „Search“. Kad įsitikintumėte, jog matote savo žurnalus, pasirinkite „Search in the last 1 hour“, spustelėkite grojimo piktogramą ir pasirinkite „Update every 1 second“.