Rydym yn ffrindiau ag ELK a Exchange. Rhan 2

Rydym yn ffrindiau ag ELK a Exchange. Rhan 2

Rwy'n parhau Γ’'m stori am sut i wneud ffrindiau Exchange ac ELK (dechrau yma). Gadewch imi eich atgoffa bod y cyfuniad hwn yn gallu prosesu nifer fawr iawn o foncyffion heb betruso. Y tro hwn byddwn yn siarad am sut i gael Exchange i weithio gyda chydrannau Logstash a Kibana.

Defnyddir Logstash yn y pentwr ELK i brosesu logiau yn ddeallus a'u paratoi i'w gosod mewn Elastig ar ffurf dogfennau, ac ar y sail mae'n gyfleus adeiladu delweddiadau amrywiol yn Kibana.

Gosod

Mae'n cynnwys dau gam:

  • Gosod a ffurfweddu'r pecyn OpenJDK.
  • Gosod a ffurfweddu'r pecyn Logstash.

Gosod a ffurfweddu'r pecyn OpenJDK

Rhaid lawrlwytho'r pecyn OpenJDK a'i ddadbacio i gyfeiriadur penodol. Yna mae'n rhaid i'r llwybr i'r cyfeiriadur hwn gael ei gofnodi yn y newidynnau $env:Path a $env:JAVA_HOME system weithredu Windows:

Rydym yn ffrindiau ag ELK a Exchange. Rhan 2

Rydym yn ffrindiau ag ELK a Exchange. Rhan 2

Gadewch i ni wirio'r fersiwn Java:

PS C:> java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)

Gosod a ffurfweddu'r pecyn Logstash

Dadlwythwch y ffeil archif gyda'r dosbarthiad Logstash felly. Rhaid dadbacio'r archif i wraidd y ddisg. Dadbacio i ffolder C:Program Files Nid yw'n werth chweil, bydd Logstash yn gwrthod cychwyn fel arfer. Yna mae angen i chi fynd i mewn i'r ffeil jvm.options atgyweiriadau sy'n gyfrifol am ddyrannu RAM ar gyfer y broses Java. Rwy'n argymell nodi hanner RAM y gweinydd. Os oes ganddo 16 GB o RAM ar y bwrdd, yna'r allweddi rhagosodedig yw:

-Xms1g
-Xmx1g

rhaid ei ddisodli Γ’:

-Xms8g
-Xmx8g

Yn ogystal, fe'ch cynghorir i wneud sylwadau ar y llinell -XX:+UseConcMarkSweepGC. Mwy am hyn yma. Y cam nesaf yw creu cyfluniad rhagosodedig yn y ffeil logstash.conf:

input {
 stdin{}
}
 
filter {
}
 
output {
 stdout {
 codec => "rubydebug"
 }
}

Gyda'r cyfluniad hwn, mae Logstash yn darllen data o'r consol, yn ei drosglwyddo trwy hidlydd gwag, ac yn ei allbynnu yn Γ΄l i'r consol. Bydd defnyddio'r cyfluniad hwn yn profi ymarferoldeb Logstash. I wneud hyn, gadewch i ni ei redeg yn y modd rhyngweithiol:

PS C:...bin> .logstash.bat -f .logstash.conf
...
[2019-12-19T11:15:27,769][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2019-12-19T11:15:27,847][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-12-19T11:15:28,113][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

Lansiwyd Logstash yn llwyddiannus ar borthladd 9600.

Y cam gosod olaf: lansio Logstash fel gwasanaeth Windows. Gellir gwneud hyn, er enghraifft, gan ddefnyddio'r pecyn NSSM:

PS C:...bin> .nssm.exe install logstash
Service "logstash" installed successfully!

goddefgarwch fai

Sicrheir diogelwch logiau pan gΓ’nt eu trosglwyddo o'r gweinydd ffynhonnell gan fecanwaith Ciwiau Parhaus.

Sut mae'n gweithio

Cynllun y ciwiau yn ystod prosesu logiau yw: mewnbwn β†’ ciw β†’ hidlydd + allbwn.

Mae'r ategyn mewnbwn yn derbyn data o ffynhonnell log, yn ei ysgrifennu i giw, ac yn anfon cadarnhad bod y data wedi'i dderbyn i'r ffynhonnell.

Mae negeseuon o'r ciw yn cael eu prosesu gan Logstash, eu pasio trwy'r hidlydd a'r ategyn allbwn. Wrth dderbyn cadarnhad gan allbwn bod y log wedi'i anfon, mae Logstash yn tynnu'r log wedi'i brosesu o'r ciw. Os bydd Logstash yn stopio, bydd yr holl negeseuon a negeseuon heb eu prosesu na chafwyd cadarnhad ar eu cyfer yn aros yn y ciw, a bydd Logstash yn parhau i'w prosesu y tro nesaf y bydd yn dechrau.

addasiad

Addasadwy gan allweddi yn y ffeil C:Logstashconfiglogstash.yml:

  • queue.type: (gwerthoedd posibl - persisted ΠΈ memory (default)).
  • path.queue: (llwybr i'r ffolder gyda ffeiliau ciw, sy'n cael eu storio yn C:Logstashqueue yn ddiofyn).
  • queue.page_capacity: (maint tudalen ciw mwyaf, gwerth diofyn yw 64mb).
  • queue.drain: (gwir/anghywir - yn galluogi/analluogi atal prosesu ciw cyn cau Logstash i lawr. Nid wyf yn argymell ei alluogi, oherwydd bydd hyn yn effeithio'n uniongyrchol ar gyflymder diffodd y gweinydd).
  • queue.max_events: (uchafswm nifer y digwyddiadau yn y ciw, rhagosodiad yw 0 (diderfyn)).
  • queue.max_bytes: (maint ciw mwyaf mewn bytes, rhagosodiad - 1024mb (1gb)).

Os caiff ei ffurfweddu queue.max_events ΠΈ queue.max_bytes, yna bydd negeseuon yn peidio Γ’ chael eu derbyn i'r ciw pan gyrhaeddir gwerth unrhyw un o'r gosodiadau hyn. Dysgwch fwy am Giwiau Parhaus yma.

Enghraifft o'r rhan o logstash.yml sy'n gyfrifol am sefydlu'r ciw:

queue.type: persisted
queue.max_bytes: 10gb

addasiad

Mae cyfluniad Logstash fel arfer yn cynnwys tair rhan, sy'n gyfrifol am wahanol gyfnodau o brosesu logiau sy'n dod i mewn: derbyn (adran mewnbwn), dosrannu (adran hidlo) ac anfon i Elastic (adran allbwn). Isod byddwn yn edrych yn agosach ar bob un ohonynt.

mewnbwn

Rydym yn derbyn y ffrwd sy'n dod i mewn gyda logiau amrwd gan asiantau curiad ffeil. Dyma'r ategyn hwn rydyn ni'n ei nodi yn yr adran fewnbwn:

input {
  beats {
    port => 5044
  }
}

Ar Γ΄l y cyfluniad hwn, mae Logstash yn dechrau gwrando ar borthladd 5044, ac wrth dderbyn logiau, mae'n eu prosesu yn unol Γ’ gosodiadau'r adran hidlo. Os oes angen, gallwch lapio'r sianel ar gyfer derbyn logiau o filebit yn SSL. Darllenwch fwy am osodiadau ategyn curiadau yma.

Hidlo

Mae'r holl logiau testun sy'n ddiddorol i'w prosesu y mae Exchange yn eu cynhyrchu mewn fformat csv gyda'r meysydd a ddisgrifir yn y ffeil log ei hun. Ar gyfer dosrannu cofnodion csv, mae Logstash yn cynnig tri ategyn i ni: dyrnod, csv a grok. Yr un cyntaf yw'r mwyaf cyflym, ond yn ymdopi Γ’ dosrannu dim ond y boncyffion symlaf.
Er enghraifft, bydd yn rhannu'r cofnod canlynol yn ddau (oherwydd presenoldeb coma y tu mewn i'r cae), a dyna pam y bydd y log yn cael ei ddosrannu'n anghywir:

…,"MDB:GUID1, Mailbox:GUID2, Event:526545791, MessageClass:IPM.Note, CreationTime:2020-05-15T12:01:56.457Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant",…

Gellir ei ddefnyddio wrth ddosrannu logiau, er enghraifft, IIS. Yn yr achos hwn, efallai y bydd yr adran hidlo yn edrych fel hyn:

filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
    }
  }
} 

Mae ffurfweddiad Logstash yn caniatΓ‘u ichi ei ddefnyddio datganiadau amodol, felly ni allwn ond anfon logiau a gafodd eu tagio gyda'r tag filebeat i'r ategyn dissect IIS. Y tu mewn i'r ategyn rydym yn cyfateb y gwerthoedd maes gyda'u henwau, dileu'r maes gwreiddiol message, a oedd yn cynnwys cofnod o'r log, a gallwn ychwanegu maes arfer a fydd, er enghraifft, yn cynnwys enw'r cais yr ydym yn casglu logiau ohono.

Yn achos olrhain logiau, mae'n well defnyddio'r ategyn csv; gall brosesu meysydd cymhleth yn gywir:

filter {
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
}

Y tu mewn i'r ategyn rydym yn cyfateb y gwerthoedd maes gyda'u henwau, dileu'r maes gwreiddiol message (a hefyd caeau tenant-id ΠΈ schema-version), a oedd yn cynnwys cofnod o'r log, a gallwn ychwanegu maes arfer, a fydd, er enghraifft, yn cynnwys enw'r cais yr ydym yn casglu logiau ohono.

Ar yr allanfa o'r cam hidlo, byddwn yn derbyn dogfennau mewn brasamcan cyntaf, yn barod i'w delweddu yn Kibana. Byddwn yn colli'r canlynol:

  • Bydd meysydd rhifol yn cael eu cydnabod fel testun, sy'n atal gweithrediadau arnynt. Sef, y caeau time-taken IIS log, yn ogystal Γ’ meysydd recipient-count ΠΈ total-bites Olrhain Log.
  • Bydd stamp amser safonol y ddogfen yn cynnwys yr amser y cafodd y cofnod ei brosesu, nid yr amser y cafodd ei ysgrifennu ar ochr y gweinydd.
  • Maes recipient-address Bydd yn edrych fel un safle adeiladu, nad yw'n caniatΓ‘u ar gyfer dadansoddiad i gyfrif y rhai sy'n derbyn llythyrau.

Mae'n bryd ychwanegu ychydig o hud i'r broses brosesu logiau.

Trosi meysydd rhifol

Mae gan yr ategyn dissect opsiwn convert_datatype, y gellir ei ddefnyddio i drosi maes testun i fformat digidol. Er enghraifft, fel hyn:

dissect {
  …
  convert_datatype => { "time-taken" => "int" }
  …
}

Mae'n werth cofio bod y dull hwn yn addas dim ond os bydd y cae yn bendant yn cynnwys llinyn. Nid yw'r opsiwn yn prosesu gwerthoedd Null o feysydd ac yn taflu eithriad.

Ar gyfer olrhain logiau, mae'n well peidio Γ’ defnyddio dull trosi tebyg, gan fod y meysydd recipient-count ΠΈ total-bites gall fod yn wag. I drosi'r meysydd hyn mae'n well defnyddio ategyn treiglo:

mutate {
  convert => [ "total-bytes", "integer" ]
  convert => [ "recipient-count", "integer" ]
}

Rhannu derbyniwr_cyfeiriad i dderbynwyr unigol

Gellir datrys y broblem hon hefyd gan ddefnyddio'r ategyn treiglo:

mutate {
  split => ["recipient_address", ";"]
}

Newid y stamp amser

Yn achos olrhain logiau, mae'r broblem yn cael ei datrys yn hawdd iawn gan yr ategyn dyddiad, a fydd yn eich helpu i ysgrifennu yn y maes timestamp dyddiad ac amser yn y fformat gofynnol o'r maes date-time:

date {
  match => [ "date-time", "ISO8601" ]
  timezone => "Europe/Moscow"
  remove_field => [ "date-time" ]
}

Yn achos logiau IIS, bydd angen i ni gyfuno data maes date ΠΈ time gan ddefnyddio'r ategyn treiglo, cofrestrwch y parth amser sydd ei angen arnom a rhowch y stamp amser hwn ynddo timestamp gan ddefnyddio'r ategyn dyddiad:

mutate { 
  add_field => { "data-time" => "%{date} %{time}" }
  remove_field => [ "date", "time" ]
}
date { 
  match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
  timezone => "UTC"
  remove_field => [ "data-time" ]
}

Allbwn

Defnyddir yr adran allbwn i anfon logiau wedi'u prosesu i'r derbynnydd log. Mewn achos o anfon yn uniongyrchol i Elastic, defnyddir ategyn elasticsearch, sy'n pennu cyfeiriad y gweinydd a thempled enw mynegai ar gyfer anfon y ddogfen a gynhyrchir:

output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

Cyfluniad terfynol

Bydd y cyfluniad terfynol yn edrych fel hyn:

input {
  beats {
    port => 5044
  }
}
 
filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
      convert_datatype => { "time-taken" => "int" }
    }
    mutate { 
      add_field => { "data-time" => "%{date} %{time}" }
      remove_field => [ "date", "time" ]
    }
    date { 
      match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
      timezone => "UTC"
      remove_field => [ "data-time" ]
    }
  }
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
    mutate {
      convert => [ "total-bytes", "integer" ]
      convert => [ "recipient-count", "integer" ]
      split => ["recipient_address", ";"]
    }
    date {
      match => [ "date-time", "ISO8601" ]
      timezone => "Europe/Moscow"
      remove_field => [ "date-time" ]
    }
  }
}
 
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

Dolenni defnyddiol:

Ffynhonnell: hab.com

Ychwanegu sylw