እንዴት ጓደኛ ማፍራት እንዳለብኝ ታሪኬን እቀጥላለሁ ልውውጥ እና ኤልኬ (መጀመሪያ
በ ELK ቁልል ውስጥ Logstash ምዝግብ ማስታወሻዎችን በብልህነት ለማስኬድ እና በ Elastic ውስጥ በሰነዶች መልክ ለመመደብ ለማዘጋጀት ይጠቅማል ፣ በዚህ መሠረት በኪባና ውስጥ የተለያዩ ምስላዊ ምስሎችን ለመገንባት ምቹ ነው።
ቅንብር
ሁለት ደረጃዎችን ያካትታል:
- የOpenJDK ጥቅልን መጫን እና ማዋቀር።
- የ Logstash ጥቅል መጫን እና ማዋቀር.
የOpenJDK ጥቅልን መጫን እና ማዋቀር
የOpenJDK ጥቅል መውረድ እና ወደ አንድ የተወሰነ ማውጫ መከፈት አለበት። ከዚያ ወደዚህ ማውጫ የሚወስደው መንገድ በ $env:Path እና $env:JAVA_HOME የዊንዶው ኦፐሬቲንግ ሲስተም ተለዋዋጮች ውስጥ መግባት አለበት።
የጃቫን ስሪት እንፈትሽ፡-
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)
የ Logstash ጥቅል መጫን እና ማዋቀር
የማህደሩን ፋይል በሎግስታሽ ስርጭት ያውርዱ C:Program Files
ዋጋ የለውም, Logstash በመደበኛነት ለመጀመር እምቢ ይላል. ከዚያ ወደ ፋይሉ ውስጥ ማስገባት ያስፈልግዎታል jvm.options
ለጃቫ ሂደት ራም የመመደብ ሃላፊነትን ያስተካክላል። የአገልጋዩን ራም ግማሹን እንዲገልጹ እመክራለሁ። በቦርዱ ላይ 16 ጊባ ራም ካለው ነባሪ ቁልፎቹ የሚከተሉት ናቸው
-Xms1g
-Xmx1g
መተካት ያለበት በ:
-Xms8g
-Xmx8g
በተጨማሪም, በመስመሩ ላይ አስተያየት መስጠት ተገቢ ነው -XX:+UseConcMarkSweepGC
. ስለዚህ ጉዳይ የበለጠ
input {
stdin{}
}
filter {
}
output {
stdout {
codec => "rubydebug"
}
}
በዚህ ውቅር ሎግስታሽ ከኮንሶሉ ላይ ያለውን መረጃ አንብቦ በባዶ ማጣሪያ ውስጥ ያልፍና ወደ ኮንሶሉ መልሶ ያወጣዋል። ይህንን ውቅር በመጠቀም የሎግስታሽ ተግባርን ይፈትሻል። ይህንን ለማድረግ በይነተገናኝ ሁነታ እናስኬደው፡
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}
Logstash ወደብ 9600 በተሳካ ሁኔታ ተጀመረ።
የመጨረሻው የመጫኛ ደረጃ: Logstash ን እንደ የዊንዶውስ አገልግሎት ያስጀምሩ. ይህ ለምሳሌ ጥቅሉን በመጠቀም ሊከናወን ይችላል
PS C:...bin> .nssm.exe install logstash
Service "logstash" installed successfully!
ስህተትን መታገስ
ከምንጩ አገልጋይ ሲተላለፉ የምዝግብ ማስታወሻዎች ደህንነት የሚረጋገጠው በቋሚ ወረፋዎች ዘዴ ነው።
እንዴት እንደሚሰራ
በምዝግብ ማስታወሻ ሂደት ወቅት የወረፋዎች አቀማመጥ: ግብዓት → ወረፋ → ማጣሪያ + ውፅዓት።
የግብአት ፕለጊኑ ከሎግ ምንጭ መረጃ ይቀበላል፣ ወደ ወረፋ ይጽፋል እና ውሂቡ ወደ ምንጩ መቀበሉን ማረጋገጫ ይልካል።
ከወረፋው የሚመጡ መልዕክቶች በLogstash ይከናወናሉ፣ በማጣሪያው እና በውጤቱ ተሰኪው ውስጥ ያልፋሉ። ሎግስታሽ ከውጤቱ የተላከ ማረጋገጫ ሲደርሰው ሎግስታሽ የተሰራውን መዝገብ ከወረፋው ያስወግዳል። Logstash ከቆመ፣ ምንም ማረጋገጫ ያልደረሳቸው ሁሉም ያልተከናወኑ መልእክቶች እና መልእክቶች ወረፋው ላይ ይቆያሉ፣ እና ሎግስታሽ በሚቀጥለው ጊዜ ሲጀምር ማሰራቱን ይቀጥላል።
በደንብ ማድረግ
በፋይሉ ውስጥ ባሉ ቁልፎች ማስተካከል ይቻላል C:Logstashconfiglogstash.yml:
queue.type
: ( ሊሆኑ የሚችሉ እሴቶች -persisted
иmemory (default))
.path.queue
: (በነባሪ በ C: Logstashqueue ውስጥ የተከማቹ የወረፋ ፋይሎች ወዳለው አቃፊ የሚወስደው መንገድ)።queue.page_capacity
: (ከፍተኛው የወረፋ ገጽ መጠን፣ ነባሪ ዋጋው 64 ሜባ ነው።)queue.drain
: (እውነት/ውሸት - Logstashን ከመዝጋቱ በፊት የወረፋ ሂደትን ማቆምን ያስችላል/ያሰናክላል። እሱን ማንቃት አልመክርም ምክንያቱም ይህ በቀጥታ የአገልጋይ መዘጋት ፍጥነት ላይ ተጽዕኖ ይኖረዋል)።queue.max_events
: (በወረፋው ውስጥ ከፍተኛው የክስተቶች ብዛት፣ ነባሪ 0 ነው (ያልተገደበ))።queue.max_bytes
: (ከፍተኛው የወረፋ መጠን በባይት፣ ነባሪ - 1024 ሜባ (1ጂቢ))።
ከተዋቀረ queue.max_events
и queue.max_bytes
, ከዚያም መልዕክቶች የማንኛቸውም ቅንጅቶች ዋጋ ላይ ሲደርሱ ወደ ወረፋው መቀበል ያቆማል. ስለቋሚ ወረፋዎች የበለጠ ይረዱ
ወረፋውን የማዘጋጀት ኃላፊነት ያለው የ logstash.yml ክፍል ምሳሌ፡-
queue.type: persisted
queue.max_bytes: 10gb
በደንብ ማድረግ
Logstash ውቅር ብዙውን ጊዜ ሶስት ክፍሎችን ያቀፈ ነው, ለተለያዩ የገቢ ምዝግቦች ሂደት ደረጃዎች ኃላፊነት ያለው: መቀበል (የግቤት ክፍል), መተንተን (የማጣሪያ ክፍል) እና ወደ ላስቲክ (የውጤት ክፍል) መላክ. ከዚህ በታች እያንዳንዳቸውን በዝርዝር እንመለከታለን.
ግቤት
የሚመጣውን ዥረት በጥሬ ምዝግብ ማስታወሻዎች ከፋይልቢት ወኪሎች እንቀበላለን። በግቤት ክፍል ውስጥ የምናመለክተው ይህን ፕለጊን ነው፡-
input {
beats {
port => 5044
}
}
ከዚህ ውቅር በኋላ Logstash ወደብ 5044 ማዳመጥ ይጀምራል, እና ምዝግብ ማስታወሻዎችን ሲቀበሉ, በማጣሪያው ክፍል ቅንጅቶች መሰረት ያስኬዳቸዋል. አስፈላጊ ከሆነ በኤስኤስኤል ውስጥ ከፋይልቢት ምዝግብ ማስታወሻዎችን ለመቀበል ቻናሉን መጠቅለል ይችላሉ። ስለ ቢትስ ተሰኪ ቅንብሮች የበለጠ ያንብቡ
ማጣሪያ
ልውውጥ የሚያመነጨውን ለመስራት የሚያስደስት የጽሑፍ ምዝግብ ማስታወሻዎች በራሱ በመዝገብ ፋይሉ ውስጥ ከተገለጹት መስኮች ጋር በ csv ቅርጸት ናቸው። የ csv መዝገቦችን ለመተንተን ሎግስታሽ ሶስት ተሰኪዎችን ይሰጠናል፡
ለምሳሌ፣ የሚከተለውን መዝገብ ለሁለት ይከፍላል (በሜዳው ውስጥ ኮማ በመኖሩ)፣ ለዚህም ነው ምዝግብ ማስታወሻው በስህተት የሚተነተነው፡-
…,"MDB:GUID1, Mailbox:GUID2, Event:526545791, MessageClass:IPM.Note, CreationTime:2020-05-15T12:01:56.457Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant",…
የምዝግብ ማስታወሻዎችን በሚተነተንበት ጊዜ ጥቅም ላይ ሊውል ይችላል, ለምሳሌ, IIS. በዚህ አጋጣሚ የማጣሪያው ክፍል ይህን ይመስላል።
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" }
}
}
}
Logstash ውቅር እንድትጠቀም ይፈቅድልሃል IIS
. በተሰኪው ውስጥ የመስክ እሴቶችን ከስማቸው ጋር እናዛምዳለን ፣ የመጀመሪያውን መስክ ሰርዝ message
, ይህም ከመዝገቡ ውስጥ ግቤት ይዟል, እና እኛ ለምሳሌ የምዝግብ ማስታወሻዎችን የምንሰበስብበትን የመተግበሪያውን ስም የያዘ ብጁ መስክ ማከል እንችላለን.
የመከታተያ ምዝግብ ማስታወሻዎችን በተመለከተ ፣ የ csv ፕለጊን መጠቀም የተሻለ ነው ፣ ውስብስብ መስኮችን በትክክል ማካሄድ ይችላል-
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" }
}
}
በተሰኪው ውስጥ የመስክ እሴቶችን ከስማቸው ጋር እናዛምዳለን ፣ የመጀመሪያውን መስክ ሰርዝ message
(እና እንዲሁም መስኮች tenant-id
и schema-version
) ከምዝግብ ማስታወሻው ውስጥ ግቤት የያዘው እና ብጁ መስክ ማከል እንችላለን, ለምሳሌ, የምዝግብ ማስታወሻዎችን የምንሰበስብበትን የመተግበሪያ ስም ይይዛል.
ከማጣራት ደረጃ በሚወጣበት ጊዜ, በኪባና ውስጥ ለዕይታ ዝግጁ የሆኑ ሰነዶችን በመጀመሪያ ግምት ውስጥ እንቀበላለን. የሚከተለው ይጎድለናል፡-
- የቁጥር መስኮች እንደ ጽሑፍ ይታወቃሉ, ይህም በእነሱ ላይ ስራዎችን ይከለክላል. ማለትም መስኮች
time-taken
IIS ምዝግብ ማስታወሻ, እንዲሁም መስኮችrecipient-count
иtotal-bites
የምዝግብ ማስታወሻ መከታተል. - የመደበኛ ሰነድ የጊዜ ማህተም የምዝግብ ማስታወሻው የተከናወነበትን ጊዜ እንጂ በአገልጋዩ በኩል የተጻፈበትን ጊዜ አይይዝም።
- መስክ
recipient-address
የፊደል ተቀባዮችን ለመቁጠር ትንተና የማይፈቅድ አንድ የግንባታ ቦታ ይመስላል።
በምዝግብ ማስታወሻ ሂደቱ ላይ ትንሽ አስማት ለመጨመር ጊዜው አሁን ነው.
የቁጥር መስኮችን በመቀየር ላይ
የዲስክ ፕለጊኑ አማራጭ አለው። convert_datatype
, ይህም የጽሑፍ መስክን ወደ ዲጂታል ቅርጸት ለመለወጥ ሊያገለግል ይችላል. ለምሳሌ፣ እንደዚህ፡-
dissect {
…
convert_datatype => { "time-taken" => "int" }
…
}
ሜዳው በእርግጠኝነት ሕብረቁምፊን ከያዘ ይህ ዘዴ ተስማሚ መሆኑን ማስታወስ ጠቃሚ ነው. አማራጩ ባዶ እሴቶችን ከሜዳ ላይ አያስኬድም እና የተለየ ነገርን ይጥላል።
የምዝግብ ማስታወሻዎችን ለመከታተል, ከመስኮቹ ጀምሮ, ተመሳሳይ የመቀየሪያ ዘዴን አለመጠቀም የተሻለ ነው recipient-count
и total-bites
ባዶ ሊሆን ይችላል. እነዚህን መስኮች ለመቀየር ፕለጊን መጠቀም የተሻለ ነው።
mutate {
convert => [ "total-bytes", "integer" ]
convert => [ "recipient-count", "integer" ]
}
የተቀባዩን_አድራሻ ወደ ግለሰብ ተቀባዮች በመከፋፈል
ይህ ችግር በሚውቴት ፕለጊን በመጠቀምም ሊፈታ ይችላል፡-
mutate {
split => ["recipient_address", ";"]
}
የጊዜ ማህተሙን መለወጥ
የመከታተያ ምዝግብ ማስታወሻዎችን በተመለከተ, ችግሩ በተሰኪው በጣም በቀላሉ ይፈታል timestamp
ቀን እና ሰዓት ከመስክ በሚፈለገው ቅርጸት date-time
:
date {
match => [ "date-time", "ISO8601" ]
timezone => "Europe/Moscow"
remove_field => [ "date-time" ]
}
በ IIS ምዝግብ ማስታወሻዎች ውስጥ, የመስክ ውሂብን ማዋሃድ ያስፈልገናል date
и time
የሚውቴት ፕለጊን በመጠቀም፣ የምንፈልገውን የሰዓት ሰቅ ያስመዝግቡ እና ይህንን የሰዓት ማህተም ያስገቡ timestamp
የቀን ፕለጊን በመጠቀም፡-
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" ]
}
ዉጤት
የውጤት ክፍሉ የተቀነባበሩ ምዝግብ ማስታወሻዎችን ወደ ሎግ ተቀባይ ለመላክ ይጠቅማል። በቀጥታ ወደ ላስቲክ ለመላክ፣ ፕለጊን ጥቅም ላይ ይውላል
output {
elasticsearch {
hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
manage_template => false
index => "Exchange-%{+YYYY.MM.dd}"
}
}
የመጨረሻ ውቅር
የመጨረሻው ውቅር የሚከተለውን ይመስላል።
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}"
}
}
ጠቃሚ አገናኞች:
በዊንዶውስ ላይ OpenJDK 11 እንዴት እንደሚጫን? Logstash አውርድ ላስቲክ የተበላሸ አማራጭን ይጠቀማል ConcMarkSweepGC #36828 ኤስኤስኤስኤም የማያቋርጥ ወረፋዎች የቢትስ ግቤት ተሰኪ Logstash Dude፣ የእኔ ቼይንሶው የት አለ? የምዝግብ ማስታወሻዎቼን መበተን አለብኝ የማጣሪያ ፕለጊን ይንቀሉ ሁኔታዎች የማጣሪያ ፕለጊን ሚውቴሽን የቀን ማጣሪያ ተሰኪ የላስቲክ ፍለጋ ውፅዓት ተሰኪ
ምንጭ: hab.com