Fluentd: Nahoana no zava-dehibe ny manamboatra ny buffer output

Fluentd: Nahoana no zava-dehibe ny manamboatra ny buffer output

Amin'izao fotoana izao, tsy azo atao ny maka sary an-tsaina ny tetikasa mifototra amin'ny Kubernetes raha tsy misy ny ELK stack, izay mitahiry ny logs amin'ny fampiharana sy ny singa rafitra ao amin'ny cluster. Amin'ny fanazaran-tena, mampiasa ny EFK stack miaraka amin'ny Fluentd izahay fa tsy Logstash.

Fluentd dia mpanangom-bokatra maoderina sy manerantany izay miha-malaza ary nanatevin-daharana ny Cloud Native Computing Foundation, ka izany no antony ifantohan'ny vector fampandrosoana azy amin'ny fampiasana miaraka amin'i Kubernetes.

Ny zava-misy amin'ny fampiasana Fluentd fa tsy Logstash dia tsy manova ny maha-zava-dehibe ny fonosana rindrambaiko, na izany aza, ny Fluentd dia miavaka amin'ny nuance manokana vokatry ny fahaizany.

Ohatra, rehefa nanomboka nampiasa ny EFK izahay tamin'ny tetikasa be atao miaraka amin'ny hamafin'ny fitrandrahana hazo, dia niatrika ny zava-misy fa tao Kibana dia nisy hafatra naseho imbetsaka imbetsaka. Ato amin'ity lahatsoratra ity dia hilaza aminao ny antony mahatonga an'io tranga io sy ny fomba hamahana ny olana.

Ny olana amin'ny duplication document

Ao amin'ny tetikasanay, ny Fluentd dia apetraka ho DaemonSet (nalefa mandeha ho azy amin'ny tranga iray isaky ny node ao amin'ny cluster Kubernetes) ary manara-maso ny logs container stdout ao amin'ny /var/log/containers. Aorian'ny fanangonana sy fanodinana dia alefa any amin'ny ElasticSearch ny logs amin'ny endrika antontan-taratasy JSON, atsangana amin'ny endrika cluster na mitokana, arakaraka ny haavon'ny tetikasa sy ny fepetra takiana amin'ny fandeferana sy ny fandeferana. Kibana dia ampiasaina ho interface grafika.

Rehefa mampiasa Fluentd miaraka amin'ny plugin buffering output dia sendra toe-javatra iray izay nahitana ny antontan-taratasy sasany tao amin'ny ElasticSearch mitovy tanteraka amin'ny atiny ary tsy mitovy afa-tsy amin'ny famantarana. Azonao atao ny manamarina fa famerimberenana hafatra ity amin'ny fampiasana ny log Nginx ho ohatra. Ao amin'ny rakitra log, ity hafatra ity dia misy amin'ny kopia tokana:

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

Na izany aza, misy antontan-taratasy maromaro ao amin'ny ElasticSearch misy ity hafatra ity:

{
  "_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"
  }
}

Ankoatra izany, dia mety ho mihoatra ny roa repetitions.

Raha mamaha ity olana ity ao amin'ny diarin'ny Fluentd ianao dia afaka mahita fampitandremana marobe miaraka amin'ireto atiny manaraka ireto:

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"

Mitranga ireo fampitandremana ireo rehefa tsy afaka mamerina valiny amin'ny fangatahana iray ny ElasticSearch ao anatin'ny fotoana voatondron'ny parameter request_timeout, ka izany no mahatonga ny ampahany tsy azo esorina. Aorian'izany, miezaka ny mandefa ny sombintsombiny amin'ny ElasticSearch indray ny Fluentd ary aorian'ny andrana tsy misy dikany dia vita soa aman-tsara ny fandidiana:

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"

Na izany aza, ny ElasticSearch dia mitondra ny ampahany tsirairay amin'ny buffer nafindra ho tsy manam-paharoa ary manome azy ireo soatoavina _id manokana mandritra ny fanondroana. Toy izany no miseho ny dika mitovy amin'ny hafatra.

Ao Kibana dia toa izao:

Fluentd: Nahoana no zava-dehibe ny manamboatra ny buffer output

niresaka

Misy safidy maromaro hamahana ity olana ity. Ny iray amin'izy ireo dia ny mekanika natsangana tao amin'ny plugin fluent-plugin-elasticsearch mba hamoronana hash tokana ho an'ny antontan-taratasy tsirairay. Raha mampiasa an'io mekanika io ianao, ny ElasticSearch dia hamantatra ny famerimberenana amin'ny dingana fandefasana ary hisoroka ny antontan-taratasy dika mitovy. Saingy tsy maintsy raisina an-tsaina fa ity fomba famahana ny olana ity dia miady amin'ny fanadihadiana ary tsy manafoana ny fahadisoana amin'ny tsy fahampian'ny fotoana, noho izany dia nafoinay ny fampiasana azy.

Mampiasa plugin buffering amin'ny vokatra Fluentd izahay mba hisorohana ny fahaverezan'ny log raha sendra olana amin'ny tambazotra fohy na mitombo ny hamafin'ny logging. Raha toa ka tsy afaka manoratra antontan-taratasy avy hatrany amin'ny index ny ElasticSearch, dia milahatra sy voatahiry ao anaty kapila ilay rakitra. Noho izany, amin'ny tranga misy antsika, mba hanafoanana ny loharanon'ny olana izay mitarika ho amin'ny fahadisoana voalaza etsy ambony, dia ilaina ny mametraka ny sanda marina ho an'ny masontsivana buffering, izay ny Fluentd output buffer dia ho ampy habe ary amin'izay fotoana izay dia mitantana ny ho voadio amin'ny fotoana voatondro.

Tsara ny manamarika fa ny soatoavin'ny masontsivana resahina etsy ambany dia isam-batan'olona amin'ny tranga manokana amin'ny fampiasana buffering amin'ny plugins output, satria miankina amin'ny lafin-javatra maro izy ireo: ny hamafin'ny fanoratana hafatra amin'ny log by services, performance system disk, network. ny enta-mavesatry ny fantsona sy ny bandwidth azy. Noho izany, mba hahazoana ny firafitry ny buffer izay mety amin'ny tranga tsirairay, fa tsy tafahoatra, misoroka ny fikarohana lava be an-jambany, dia azonao atao ny mampiasa ny fampahalalam-baovao debugging izay nosoratan'i Fluentd ao amin'ny diany mandritra ny fandidiana ary mahazo haingana ny sanda marina.

Tamin'ny fotoana nanoratana ny olana dia toy izao ny config:

 <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>

Rehefa mamaha ny olana dia nofantenana amin'ny tanana ny soatoavin'ireto parameter manaraka ireto:
chunk_limit_size β€” ny haben'ny sombiny izay mizara ny hafatra ao amin'ny buffer.

  • flush_interval - elanelan'ny fotoana aorian'ny fanesorana ny buffer.
  • queue_limit_length β€” ny isa ambony indrindra amin'ny filaharana.
  • request_timeout dia ny fotoana ametrahana ny fifandraisana eo amin'ny Fluentd sy ny ElasticSearch.

Ny fitambaran'ny haben'ny buffer dia azo kajy amin'ny fampitomboana ny mari-pamantarana queue_limit_length sy chunk_limit_size, izay azo adika ho "ny isa ambony indrindra amin'ny filaharana, izay samy manana ny habeny." Raha tsy ampy ny haben'ny buffer dia hiseho ao amin'ny logs ity fampitandremana manaraka ity:

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

Midika izany fa tsy manam-potoana hamafa ny buffer amin'ny fotoana voatondro ary voasakana ny angon-drakitra miditra amin'ny buffer feno, izay hitarika amin'ny fahaverezan'ny ampahany amin'ny log.

Azonao atao ny mampitombo ny buffer amin'ny fomba roa: amin'ny alΓ lan'ny fampitomboana na ny haben'ny ampahany tsirairay ao amin'ny filaharana, na ny isan'ny sombiny mety ho ao amin'ny filaharana.

Raha mametraka ny haben'ny chunk_limit_size ho mihoatra ny 32 megabytes ianao, dia tsy hanaiky izany ny ElasticSeacrh, satria ho lehibe loatra ny fonosana ho avy. Noho izany, raha mila mampitombo ny buffer bebe kokoa ianao, dia tsara kokoa ny mampitombo ny halavan'ny filaharana ambony indrindra filaharana_limit_length.

Rehefa mitsahatra tsy mihoa-pampana ny buffer ary ny hafatra tsy ampy amin'ny fe-potoana sisa tavela dia azonao atao ny manomboka mampitombo ny parameter request_timeout. Na izany aza, raha mametraka ny sanda ho mihoatra ny 20 segondra ianao dia hanomboka hiseho ao amin'ny diarin'ny Fluentd ireto fampitandremana manaraka ireto:

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" 

Ity hafatra ity dia tsy misy fiantraikany amin'ny fiasan'ny rafitra amin'ny fomba rehetra ary midika fa naharitra ela kokoa noho ny nametrahan'ny paramètre slow_flush_log_threshold ny fotoana famafazana buffer. Ity dia fampahalalana momba ny debugging ary ampiasainay rehefa misafidy ny sandan'ny parameter request_timeout.

Ny algorithm amin'ny fisafidianana ankapobeny dia toy izao manaraka izao:

  1. Mametraha request_time out amin'ny sanda azo antoka fa lehibe noho ny ilaina (segondra an-jatony). Mandritra ny fanamboarana, ny fepetra fototra ho an'ny fametrahana marina an'io mari-pamantarana io dia ny fanjavonan'ny fampitandremana noho ny tsy fahampian'ny fotoana.
  2. Andraso ny hafatra momba ny fihoaram-pefy slow_flush_log_threshold. Ny lahatsoratra fampitandremana ao amin'ny saha elapsed_time dia hampiseho ny fotoana tena nesorina ny buffer.
  3. Apetraho amin'ny sanda lehibe kokoa noho ny sanda_fotoana_farany ambony indrindra azo nandritra ny fe-potoana fandinihana. Kajy ny sandan'ny request_time out ho toy ny elapsed_time + 50%.
  4. Mba hanesorana ny fampitandremana momba ny fikorianan'ny buffer lava amin'ny log, azonao atao ny mampiakatra ny sandan'ny slow_flush_log_threshold. Kajy ity sanda ity ho toy ny elapsed_time + 25%.

Ny sanda farany amin'ireo mari-pamantarana ireo, araka ny voalaza tetsy aloha, dia azo tsirairay ho an'ny tranga tsirairay. Amin'ny fanarahana ny algorithm etsy ambony, dia azo antoka fa hanafoana ny fahadisoana izay mitondra hafatra miverimberina.

Ny tabilao etsy ambany dia mampiseho ny isan'ny lesoka isan'andro, izay mitarika ho amin'ny dika mitovy amin'ny hafatra, ny fiovan'ny dingan'ny fisafidianana ny soatoavin'ny masontsivana voalaza etsy ambony:

node-1
node-2
node-3
node-4

Alohan'ny aorian'izay
Alohan'ny aorian'izay
Alohan'ny aorian'izay
Alohan'ny aorian'izay

tsy nahavita nanala ny buffer
1749/2
694/2
47/0
1121/2

nahomby ny andrana indray
410/2
205/1
24/0
241/2

Tsara ihany koa ny manamarika fa ny toe-javatra aterak'izany dia mety ho very ny lanjany rehefa mitombo ny tetikasa ary, araka izany, dia mitombo ny isan'ny diary. Ny famantarana voalohany amin'ny tsy fahampian'ny fe-potoana dia ny fiverenan'ny hafatra momba ny fikorianan'ny buffer lava amin'ny log Fluentd, izany hoe, mihoatra ny fetra slow_flush_log_threshold. Hatramin'io fotoana io dia mbola misy sisiny kely alohan'ny hihoaran'ny parameter request_timeout, noho izany dia ilaina ny mamaly ireo hafatra ireo amin'ny fomba ara-potoana ary mamerina ny dingana amin'ny fisafidianana ny toe-javatra tsara indrindra voalaza etsy ambony.

famaranana

Ny fanitsiana tsara ny buffer Output Fluentd dia iray amin'ireo dingana lehibe amin'ny fanamboarana ny stack EFK, mamaritra ny fahamarinan'ny asany sy ny fametrahana marina ny antontan-taratasy ao amin'ny index. Miorina amin'ny algorithm fanamafisana voalaza, azonao antoka fa hosoratana amin'ny index ElasticSearch amin'ny filaharana marina ny logs rehetra, tsy misy famerimberenana na fatiantoka.

Vakio ihany koa lahatsoratra hafa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment