Fileanta: Carson a tha e cudromach am bufair toraidh a rèiteachadh

Fileanta: Carson a tha e cudromach am bufair toraidh a rèiteachadh

An-diugh, tha e do-dhèanta smaoineachadh air pròiseact stèidhichte air Kubernetes às aonais stac ELK, a shàbhaileas logaichean an dà chuid tagraidhean agus co-phàirtean siostam den bhuidheann. Nar cleachdadh, bidh sinn a’ cleachdadh stac EFK le Fluentd an àite Logstash.

Tha Fluentd na neach-cruinneachaidh logaichean ùr-nodha, uile-choitcheann a tha a’ sìor fhàs mòr-chòrdte agus tha e air a dhol a-steach don Cloud Native Computing Foundation, agus is e sin as coireach gu bheil an vectar leasachaidh aige ag amas air cleachdadh ann an co-bhonn ri Kubernetes.

Chan eil an fhìrinn a bhith a’ cleachdadh Fluentd an àite Logstash ag atharrachadh brìgh coitcheann a’ phacaid bathar-bog, ge-tà, tha Fluentd air a chomharrachadh leis na nuances sònraichte aige fhèin mar thoradh air cho sùbailteachd ‘s a tha e.

Mar eisimpleir, nuair a thòisich sinn a 'cleachdadh EFK ann am pròiseact trang le fìor dhian de logadh, bha sinn an aghaidh gun deach cuid de theachdaireachdan a thaisbeanadh grunn thursan ann an Kibana. San artaigil seo innsidh sinn dhut carson a tha an iongantas seo a ’tachairt agus mar a dh’ fhuasglas tu an duilgheadas.

An duilgheadas le dùblachadh sgrìobhainnean

Anns na pròiseactan againn, tha Fluentd air a chleachdadh mar DaemonSet (air a chuir air bhog gu fèin-ghluasadach ann an aon suidheachadh air gach nód de bhuidheann Kubernetes) agus a’ cumail sùil air logaichean stdout container ann an /var/log/containers. Às deidh cruinneachadh agus giullachd, thèid na logaichean ann an cruth sgrìobhainnean JSON a chuir gu ElasticSearch, air an togail ann an cruth cnuasachaidh no leotha fhèin, a rèir meud a ’phròiseict agus na riatanasan airson coileanadh agus fulangas sgàinidhean. Tha Kibana air a chleachdadh mar eadar-aghaidh grafaigeach.

Nuair a bha sinn a’ cleachdadh Fluentd le plugan buffering toraidh, thachair sinn ri suidheachadh far an robh an aon susbaint aig cuid de sgrìobhainnean ann an ElasticSearch agus nach robh iad eadar-dhealaichte ach san aithnichear. Faodaidh tu dearbhadh gur e ath-aithris teachdaireachd a tha seo le bhith a’ cleachdadh log Nginx mar eisimpleir. Anns an fhaidhle loga, tha am brath seo ann an aon lethbhreac:

127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -

Ach, tha grunn sgrìobhainnean ann an ElasticSearch anns a bheil an teachdaireachd seo:

{
  "_index": "test-custom-prod-example-2020.01.02",
  "_type": "_doc",
  "_id": "HgGl_nIBR8C-2_33RlQV",
  "_version": 1,
  "_score": 0,
  "_source": {
    "service": "test-custom-prod-example",
    "container_name": "nginx",
    "namespace": "test-prod",
    "@timestamp": "2020-01-14T05:29:47.599052886 00:00",
    "log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00  0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
    "tag": "custom-log"
  }
}

{
  "_index": "test-custom-prod-example-2020.01.02",
  "_type": "_doc",
  "_id": "IgGm_nIBR8C-2_33e2ST",
  "_version": 1,
  "_score": 0,
  "_source": {
    "service": "test-custom-prod-example",
    "container_name": "nginx",
    "namespace": "test-prod",
    "@timestamp": "2020-01-14T05:29:47.599052886 00:00",
    "log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00  0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
    "tag": "custom-log"
  }
}

A bharrachd air an sin, faodaidh barrachd air dà ath-aithris a bhith ann.

Fhad ‘s a tha thu a’ càradh na duilgheadas seo anns na logaichean Fluentd, chì thu àireamh mhòr de rabhaidhean leis an t-susbaint a leanas:

2020-01-16 01:46:46 +0000 [warn]: [test-prod] failed to flush the buffer. retry_time=4 next_retry_seconds=2020-01-16 01:46:53 +0000 chunk="59c37fc3fb320608692c352802b973ce" error_class=Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure error="could not push logs to Elasticsearch cluster ({:host=>"elasticsearch", :port=>9200, :scheme=>"http", :user=>"elastic", :password=>"obfuscated"}): read timeout reached"

Bidh na rabhaidhean sin a’ tachairt nuair nach urrainn dha ElasticSearch freagairt a thilleadh gu iarrtas taobh a-staigh na h-ùine a chaidh a shònrachadh leis a’ pharameter request_timeout, agus is e sin as coireach nach urrainnear a’ chriomag bufair a chaidh a chuir air adhart a ghlanadh. Às deidh seo, bidh Fluentd a’ feuchainn ris a’ chriomag bufair a chuir gu ElasticSearch a-rithist agus às deidh grunn oidhirpean neo-riaghailteach, thig an obair gu crìch gu soirbheachail:

2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fc3fb320608692c352802b973ce" 
2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fad241ab300518b936e27200747" 
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fc11f7ab707ca5de72a88321cc2" 
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fb5adb70c06e649d8c108318c9b" 
2020-01-16 01:47:15 +0000 [warn]: [kube-system] retry succeeded. chunk_id="59c37f63a9046e6dff7e9987729be66f"

Ach, bidh ElasticSearch a’ làimhseachadh gach aon de na criomagan bufair a chaidh a ghluasad mar rud gun samhail agus a’ sònrachadh luachan achaidh _id sònraichte dhaibh rè clàr-amais. Seo mar a nochdas lethbhric de theachdaireachdan.

Ann an Kibana tha e a’ coimhead mar seo:

Fileanta: Carson a tha e cudromach am bufair toraidh a rèiteachadh

Fuasgladh dhuilgheadasan

Tha grunn roghainnean ann airson an duilgheadas seo fhuasgladh. Is e aon dhiubh an uidheamachd a chaidh a thogail a-steach don plugan fileanta-plugin-elasticsearch airson hash sònraichte a chruthachadh airson gach sgrìobhainn. Ma chleachdas tu an uidheamachd seo, aithnichidh ElasticSearch ath-aithris aig an ìre adhartachaidh agus cuiridh e casg air sgrìobhainnean dùblaichte. Ach feumaidh sinn a bhith mothachail gu bheil an dòigh seo airson fuasgladh fhaighinn air an duilgheadas a 'strì leis an rannsachadh agus nach eil e a' cur às don mhearachd le cion ùine, agus mar sin thrèig sinn a chleachdadh.

Bidh sinn a’ cleachdadh plugan buffering air an toradh Fileanta gus casg a chuir air call log ma tha duilgheadasan lìonra geàrr-ùine no barrachd dian logaidh ann. Mura h-urrainn dha ElasticSearch airson adhbhar air choireigin sgrìobhainn a sgrìobhadh chun chlàr-amais sa bhad, tha an sgrìobhainn air a ciudha agus air a stòradh air diosc. Mar sin, anns a 'chùis againn, gus cuir às do thùs na trioblaid a tha a' leantainn chun a 'mhearachd a tha air a mhìneachadh gu h-àrd, feumar na luachan ceart a shuidheachadh airson na crìochan bufair, aig am bi am bufair toraidh fileanta de mheud gu leòr agus aig an aon àm a bhith air a ghlanadh anns an ùine ainmichte.

Is fhiach a bhith mothachail gu bheil luachan nam paramadairean air an deach beachdachadh gu h-ìosal fa leth anns gach cùis shònraichte de bhith a ’cleachdadh buffering ann am plugins toraidh, leis gu bheil iad an urra ri mòran fhactaran: cho dian sa tha sgrìobhadh teachdaireachdan chun log le seirbheisean, coileanadh siostam diosc, lìonra luchd sianal agus an leud-bann aige. Mar sin, gus suidheachaidhean bufair fhaighinn a tha freagarrach airson gach cùis fa leth, ach nach eil feum air, a’ seachnadh rannsachaidhean fada gu dall, faodaidh tu am fiosrachadh deasbaid a bhios Fluentd a’ sgrìobhadh chun log aige a chleachdadh rè obrachadh agus an ìre mhath luath fhaighinn na luachan ceart.

Aig an àm a chaidh an duilgheadas a chlàradh, bha coltas mar seo air an rèiteachadh:

 <buffer>
        @type file
        path /var/log/fluentd-buffers/kubernetes.test.buffer
        flush_mode interval
        retry_type exponential_backoff
        flush_thread_count 2
        flush_interval 5s
        retry_forever
        retry_max_interval 30
        chunk_limit_size 8M
        queue_limit_length 8
        overflow_action block
      </buffer>

Nuair a bhios tu a 'fuasgladh na duilgheadas, chaidh luachan nam paramadairean a leanas a thaghadh le làimh:
chunk_limit_size - meud nan cnapan anns a bheil teachdaireachdan sa bhufair air an roinn.

  • flush_interval - eadar-ama às deidh sin thèid am bufair a ghlanadh.
  • queue_limit_length - an àireamh as motha de phìosan anns a’ chiudha.
  • 'S e request_timeout an t-àm airson an ceangal eadar Fileanta agus ElasticSearch a stèidheachadh.

Faodar meud bufair iomlan a thomhas le bhith ag iomadachadh nam paramadairean queue_limit_length agus chunk_limit_size, a dh’ fhaodar a mhìneachadh mar “an àireamh as motha de chnapan sa chiudha, agus tha meud sònraichte aig gach fear dhiubh.” Mura h-eil meud bufair gu leòr, nochdaidh an rabhadh a leanas anns na logaichean:

2020-01-21 10:22:57 +0000 [warn]: [test-prod] failed to write data into buffer by buffer overflow action=:block

Tha e a 'ciallachadh nach eil ùine aig a' bhufair a bhith air a ghlanadh anns an ùine ainmichte agus tha an dàta a thig a-steach don bhufair iomlan air a bhacadh, a bheir gu call pàirt de na logaichean.

Faodaidh tu am bufair àrdachadh ann an dà dhòigh: le bhith ag àrdachadh an dàrna cuid meud gach cnap sa chiudha, no an àireamh de chnapan a dh’ fhaodadh a bhith sa chiudha.

Ma shuidhicheas tu meud a’ chunk chunk_limit_size gu barrachd air 32 megabytes, cha ghabh ElasticSeacrh ris, leis gum bi am paca a thig a-steach ro mhòr. Mar sin, ma dh’ fheumas tu am bufair àrdachadh tuilleadh, tha e nas fheàrr an fhad ciudha as àirde a mheudachadh queue_limit_length.

Nuair a stadas am bufair a’ cur thairis agus nach eil ach an ùine a-mach gu leòr de theachdaireachd air fhàgail, faodaidh tu tòiseachadh air paramadair request_timeout àrdachadh. Ach, ma shuidhicheas tu an luach gu barrachd air 20 diog, tòisichidh na rabhaidhean a leanas a’ nochdadh anns na logaichean Fluentd:

2020-01-21 09:55:33 +0000 [warn]: [test-dev] buffer flush took longer time than slow_flush_log_threshold: elapsed_time=20.85753920301795 slow_flush_log_threshold=20.0 plugin_id="postgresql-dev" 

Chan eil buaidh aig an teachdaireachd seo air obrachadh an t-siostaim ann an dòigh sam bith agus tha e a’ ciallachadh gun tug an ùine sruthadh bufair nas fhaide na chaidh a shuidheachadh leis a’ pharameter slow_flush_log_threshold. Is e fiosrachadh deasbaid a tha seo agus bidh sinn ga chleachdadh nuair a thaghas sinn luach paramadair request_timeout.

Tha an algorithm taghaidh coitcheann mar a leanas:

  1. Suidhich request_timeout gu luach a tha cinnteach a bhith nas àirde na tha riatanach (ceudan diogan). Rè an stèidheachadh, is e am prìomh shlat-tomhais airson suidheachadh ceart a’ pharamadair seo a bhith a’ dol à bith rabhaidhean airson dìth ùine.
  2. Fuirich airson brathan mu bhith a’ dol thairis air an stairsneach slow_flush_log_threshold. Seallaidh an teacsa rabhaidh san raon elapsed_time an fhìor ùine a chaidh am bufair fhuadach.
  3. Suidhich request_timeout gu luach nas motha na an luach as àirde a chaidh seachad rè na h-ùine amharc. Bidh sinn a’ tomhas an luach request_timeout mar elapsed_time + 50%.
  4. Gus rabhaidhean mu shruthan bufair fada a thoirt air falbh bhon loga, faodaidh tu luach slow_flush_log_threshold àrdachadh. Bidh sinn ag obrachadh a-mach an luach seo mar elapsed_time + 25%.

Gheibhear luachan deireannach nam paramadairean sin, mar a chaidh ainmeachadh roimhe, leotha fhèin airson gach cùis. Le bhith a’ leantainn an algairim gu h-àrd, tha sinn cinnteach gun cuir sinn às don mhearachd a tha a’ leantainn gu teachdaireachdan a-rithist.

Tha an clàr gu h-ìosal a 'sealltainn mar a tha an àireamh de mhearachdan gach latha, a' leantainn gu dùblachadh teachdaireachdan, atharrachaidhean anns a 'phròiseas a' taghadh luachan na crìochan a tha air a mhìneachadh gu h-àrd:

nod-1
nod-2
nod-3
nod-4

Roimhe às deidh
Roimhe às deidh
Roimhe às deidh
Roimhe às deidh

dh'fhàillig am bufair a shruthladh
1749/2
694/2
47/0
1121/2

soirbhich leis a-rithist
410/2
205/1
24/0
241/2

'S fhiach toirt fa-near cuideachd gum faodadh na roghainnean a thig às a bhith a' call am buntainneachd mar a bhios am pròiseact a 'fàs agus, mar sin, tha an àireamh de logaichean a' dol am meud. 'S e am prìomh shoidhne nach eil ùine gu leòr ann a bhith a' tilleadh teachdaireachdan mu shruth bufair fhada dhan loga Fileantach, 's e sin, a' dol thairis air an stairsneach slow_flush_log_threshold. Bhon àm seo, tha iomall beag ann fhathast mus tèid am paramadair request_timeout thairis air, agus mar sin feumar freagairt a thoirt do na teachdaireachdan sin ann an deagh àm agus ath-aithris a dhèanamh air a’ phròiseas airson na roghainnean as fheàrr a tha air am mìneachadh gu h-àrd a thaghadh.

co-dhùnadh

Is e gleusadh bufair toraidh Fluentd aon de na prìomh ìrean ann a bhith a’ rèiteachadh stac EFK, a’ dearbhadh seasmhachd a h-obrachaidh agus a’ suidheachadh ceart sgrìobhainnean ann an clàran-amais. Stèidhichte air an algairim rèiteachaidh a chaidh a mhìneachadh, faodaidh tu a bhith cinnteach gun tèid a h-uile log a sgrìobhadh gu clàr-amais ElasticSearch san òrdugh cheart, gun ath-aithris no call.

Leugh cuideachd artaigilean eile air ar blog:

Source: www.habr.com

Cuir beachd ann