{"id":11816,"date":"2021-09-01T00:00:17","date_gmt":"2021-09-01T07:00:17","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=11816"},"modified":"2025-06-13T21:33:25","modified_gmt":"2025-06-14T04:33:25","slug":"fluent-bit-tips-tricks-log-forwarding-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","title":{"rendered":"11 Exemplos, dicas e truques de Fluent Bit para encaminhamento de logs com o Couchbase"},"content":{"rendered":"<p><strong>Encaminhamento e processamento de registros com o Couchbase<\/strong> est\u00e1 mais f\u00e1cil do que nunca.<\/p>\n<p>Temos suporte para <a href=\"https:\/\/docs.couchbase.com\/operator\/2.2\/whats-new.html?ref=blog#log-forwarding-and-audit-log-management\" target=\"_blank\" rel=\"noopener\">encaminhamento de logs e gerenciamento de logs de auditoria para o Operador Aut\u00f4nomo do Couchbase (ou seja, Kubernetes)<\/a> e para <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-fluent-bit-for-log-forwarding-processing-with-couchbase-server\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Implanta\u00e7\u00f5es do Couchbase Server no local<\/a>. Em ambos os casos, o processamento de registros \u00e9 alimentado por <a href=\"https:\/\/fluentbit.io\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Bit fluente<\/a>.<\/p>\n<p>Por que escolhemos o Fluent Bit? Os usu\u00e1rios do Couchbase precisam de logs em um formato comum com configura\u00e7\u00e3o din\u00e2mica, e quer\u00edamos usar um padr\u00e3o do setor com o m\u00ednimo de sobrecarga. O Fluent Bit foi uma escolha natural.<\/p>\n<p>Este artigo aborda dicas e truques para aproveitar ao m\u00e1ximo o uso do Fluent Bit para encaminhamento de logs com o Couchbase. Usarei o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Operador aut\u00f4nomo do Couchbase<\/a> em meus exemplos de implanta\u00e7\u00e3o. (Tamb\u00e9m apresentarei uma an\u00e1lise mais aprofundada desta postagem em <a href=\"https:\/\/fluentconna21.sched.com\/event\/mEE3\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">a pr\u00f3xima FluentCon<\/a>.)<\/p>\n<p>Antes do Fluent Bit, os formatos de registro do Couchbase variavam em v\u00e1rios arquivos. Abaixo est\u00e1 uma \u00fanica linha de quatro arquivos de registro diferentes:<\/p>\n<pre>2021-03-09T17:32:25.520+00:00 DEBU CBAS.util.MXHelper [main] ignoring exception calling RuntimeMXBean.getBootClassPath; returning null\r\njava.lang.UnsupportedOperationException: Boot class path mechanism is not supported\r\n\tat sun.management.RuntimeImpl.getBootClassPath(Unknown Source) ~[?:?]\r\n\tat org.apache.hyracks.util.MXHelper.getBootClassPath(MXHelper.java:111) [hyracks-util.jar:6.6.0-7909]\r\n<\/pre>\n<pre>{\"bucket\":\"default\",\"description\":\"The specified bucket was selected\",\"id\":20492,\"name\":\"select bucket\",\"peername\":\"127.0.0.1:56021\",\"real_userid\":{\"domain\":\"local\",\"user\":\"@ns_server\"},\"sockname\":\"127.0.0.1:11209\",\"timestamp\":\"2021-03-09T20:12:17.445039Z\"}\r\n[ns_server:warn,2021-03-09T17:31:55.401Z,babysitter_of_ns_1@cb.local:ns_crash_log&lt;0.102.0&gt;:ns_crash_log:read_crash_log:148]Couldn't load crash_log from \/opt\/couchbase\/var\/lib\/couchbase\/logs\/crash_log_v2.bin (perhaps it's first startup): {error,\r\n                                                                                                                   enoent}\r\n<\/pre>\n<pre>[error_logger:info,2021-03-09T17:31:55.401Z,babysitter_of_ns_1@cb.local:error_logger&lt;0.32.0&gt;:ale_error_logger_handler:do_log:203]\r\n=========================PROGRESS REPORT=========================\r\n          supervisor: {local,ns_babysitter_sup}\r\n<\/pre>\n<pre>127.0.0.1 - @ [09\/Mar\/2021:17:32:02 +0000] \"RPCCONNECT \/goxdcr-cbauth HTTP\/1.1\" 200 0 - Go-http-client\/1.1\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Com a atualiza\u00e7\u00e3o para o Fluent Bit, agora voc\u00ea pode transmitir visualiza\u00e7\u00f5es de logs ao vivo da seguinte forma <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/logging\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">a arquitetura de registro padr\u00e3o do Kubernetes<\/a> o que tamb\u00e9m significa <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/dashboards\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">integra\u00e7\u00e3o simples com pain\u00e9is do Grafana<\/a> e outras ferramentas padr\u00e3o do setor. Abaixo est\u00e1 uma captura de tela tirada de <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/tools\/loki-stack\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">o exemplo de pilha Loki que temos no reposit\u00f3rio Fluent Bit<\/a>.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11824\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png\" alt=\"The Loki stack from the Couchbase Fluent Bit repo\" width=\"1000\" height=\"913\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-300x274.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-768x701.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-20x18.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Quer voc\u00ea seja novo no Fluent Bit ou um profissional experiente, espero que este artigo o ajude a navegar pelas complexidades de us\u00e1-lo para o processamento de logs com o Couchbase.<\/p>\n<h2>Qual \u00e9 a sua principal d\u00favida ou desafio com o Fluent Bit?<\/h2>\n<p>Pule diretamente para o seu desafio ou pergunta espec\u00edfica com o Fluent Bit usando os links abaixo ou role mais para baixo para ler todas as dicas e truques.<\/p>\n<p><strong><a href=\"#what-is-fluent-bit\">O que \u00e9 (e por que) Fluent Bit?<\/a><\/strong><\/p>\n<p><strong>Como fa\u00e7o para fazer perguntas, obter orienta\u00e7\u00e3o ou dar sugest\u00f5es sobre o Fluent Bit?<\/strong> <a href=\"#engage-oss-community\">Envolver-se com a comunidade OSS e contribuir com ela<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para descobrir o que est\u00e1 acontecendo de errado com o Fluent Bit?<\/strong> <a href=\"#debugging\">Use o <code>sa\u00edda<\/code> plug-in e aumente o n\u00edvel de registro ao depurar<\/a>.<\/p>\n<p><strong>Como posso saber se meu analisador est\u00e1 falhando?<\/strong> <a href=\"#parsing\">Se voc\u00ea vir o padr\u00e3o <code>registro<\/code> no registro, ent\u00e3o voc\u00ea sabe que a an\u00e1lise falhou<\/a>.<\/p>\n<p><strong>Por que meu analisador de regex n\u00e3o est\u00e1 funcionando?<\/strong> <a href=\"#multi-line-parsing\">Verificar e simplificar, especialmente para an\u00e1lise de v\u00e1rias linhas<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para restringir um campo (por exemplo, n\u00edvel de registro) a valores conhecidos?<\/strong> <a href=\"#filtering\">Restrinja e padronize os valores de sa\u00edda com alguns filtros simples<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para adicionar informa\u00e7\u00f5es opcionais que podem n\u00e3o estar presentes?<\/strong> <a href=\"#filtering-options\">Use o <code>modificador de registro<\/code> n\u00e3o o filtro <code>modificar<\/code> filtro - se voc\u00ea quiser incluir informa\u00e7\u00f5es opcionais<\/a>.<\/p>\n<p><strong>Como posso identificar qual plug-in ou filtro est\u00e1 acionando uma m\u00e9trica ou mensagem de registro?<\/strong> <a href=\"#aliases\">Usar aliases<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para concluir o processamento especial ou sob medida (por exemplo, reda\u00e7\u00e3o parcial)?<\/strong> <a href=\"#lua-filter\">Use o filtro Lua: Ele pode fazer tudo!<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para verificar minhas altera\u00e7\u00f5es ou testar se uma nova vers\u00e3o ainda funciona?<\/strong> <a href=\"#testing\">Fornecer testes de regress\u00e3o automatizados<\/a>.<\/p>\n<p><strong>Como fa\u00e7o para testar cada parte da minha configura\u00e7\u00e3o?<\/strong> <a href=\"#testing-separation\">Separe sua configura\u00e7\u00e3o em partes menores. (B\u00f4nus: isso permite uma reutiliza\u00e7\u00e3o personalizada mais simples)<\/a>.<\/p>\n<p><strong><a href=\"#red-hat-openshift\">Como posso usar o Fluent Bit com o Red Hat OpenShift?<\/a><\/strong><\/p>\n<p>Respondo a essas e muitas outras perguntas no artigo abaixo. Vamos nos aprofundar.<\/p>\n<h2 id=\"what-is-fluent-bit\">O que \u00e9 (e por que) Fluent Bit?<\/h2>\n<p>Ent\u00e3o, o que \u00e9 o Fluent Bit? <a href=\"https:\/\/docs.fluentbit.io\/manual\/about\/fluentd-and-fluent-bit\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">O Fluent Bit \u00e9 a irm\u00e3 mais delicada do Fluentd<\/a>, que s\u00e3o ambos <a href=\"https:\/\/www.cncf.io\/about\/who-we-are\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Funda\u00e7\u00e3o de computa\u00e7\u00e3o nativa da nuvem (CNCF)<\/a> projetos sob a organiza\u00e7\u00e3o da Fluent.<\/p>\n<p>O Fluent Bit consome essencialmente v\u00e1rios tipos de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/input\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">entrada<\/a>, aplica um <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/parser\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">tubula\u00e7\u00e3o<\/a> de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/filter\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">processamento<\/a> para essa entrada e, em seguida, suporta <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/router\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">roteamento<\/a> esses dados para v\u00e1rios tipos de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/output\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">pontos finais<\/a>.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/fluent-bit-data-routing-diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11821\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/fluent-bit-data-routing-diagram.png\" alt=\"Architecture diagram of data routing using Fluent Bit\" width=\"1000\" height=\"380\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-300x114.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-768x292.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-20x8.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Quando se trata de Fluentd vs. Fluent Bit, o \u00faltimo \u00e9 uma escolha melhor do que o Fluentd para tarefas mais simples, especialmente quando voc\u00ea s\u00f3 precisa de <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog\" target=\"_blank\" rel=\"noopener\">encaminhamento de logs com processamento m\u00ednimo<\/a> e nada mais complexo.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11819\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png\" alt=\"An architecture diagram of log forwarding with Couchbase and Fluent Bit\" width=\"1000\" height=\"695\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-300x209.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-768x534.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-20x14.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Avaliamos v\u00e1rias outras op\u00e7\u00f5es antes do Fluent Bit, como Logstash, Promtail e rsyslog, mas acabamos optando pelo Fluent Bit por alguns motivos. Primeiro, ele \u00e9 uma solu\u00e7\u00e3o OSS com suporte do CNCF e j\u00e1 \u00e9 amplamente utilizado em provedores locais e de nuvem. Segundo, ele \u00e9 leve e tamb\u00e9m \u00e9 executado no OpenShift. Terceiro, e o mais importante, ele tem amplas op\u00e7\u00f5es de configura\u00e7\u00e3o para que voc\u00ea possa <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/howto-couchbase-log-forwarding.html?ref=blog\" target=\"_blank\" rel=\"noopener\">direcionar qualquer endpoint que voc\u00ea precise<\/a>.<\/p>\n<p>(Veja <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-fluent-bit-for-log-forwarding-processing-with-couchbase-server\/?ref=blog\" target=\"_blank\" rel=\"noopener\">meu artigo anterior sobre o Fluent Bit<\/a> ou <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/concept-couchbase-logging.html?ref=blog#log-forwarding\" target=\"_blank\" rel=\"noopener\">a documenta\u00e7\u00e3o detalhada de encaminhamento de registros<\/a> para obter mais informa\u00e7\u00f5es).<\/p>\n<h2 id=\"engage-oss-community\">Dica #1: Conecte-se com a comunidade OSS<\/h2>\n<p>Minha primeira recomenda\u00e7\u00e3o para usar o Fluent Bit \u00e9 contribuir e se envolver com sua comunidade de c\u00f3digo aberto.<\/p>\n<p>Quase tudo neste artigo \u00e9 descaradamente reutilizado de outros, seja de <a href=\"https:\/\/fluent-all.slack.com\/archives\/C0CTQGHKJ\" target=\"_blank\" rel=\"noopener\">o Slack Fluente<\/a>, postagens de blog, <a href=\"https:\/\/github.com\/kubesphere-retired\/fluent-bit\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Reposit\u00f3rios do GitHub<\/a> ou coisas do g\u00eanero. Ao mesmo tempo, contribu\u00ed com v\u00e1rios analisadores que criamos para o Couchbase <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/commit\/02bf11d07f12ab47054ca37f02f19eefb8f7058c\" target=\"_blank\" rel=\"noopener\">de volta ao reposit\u00f3rio oficial<\/a>Espero que eu tenha levantado algumas quest\u00f5es \u00fateis!<\/p>\n<p>A comunidade OSS do Fluent Bit \u00e9 ativa. Seus mantenedores se comunicam regularmente, corrigem problemas e sugerem solu\u00e7\u00f5es. Por exemplo, <a href=\"https:\/\/youtube.com\/playlist?list=PLj6h78yzYM2N3nytAN_8shp-4MNm_nPga\" target=\"_blank\" rel=\"noopener\">FluentCon EU 2021<\/a> gerou muitas sugest\u00f5es e coment\u00e1rios \u00fateis sobre o uso do Fluent Bit que, desde ent\u00e3o, integramos em vers\u00f5es subsequentes. (<a href=\"https:\/\/events.linuxfoundation.org\/fluentcon-north-america\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">FluentCon<\/a> \u00e9 tipicamente co-localizado em eventos da KubeCon).<\/p>\n<h2 id=\"debugging\">Dica #2: Depura\u00e7\u00e3o quando tudo est\u00e1 quebrado<\/h2>\n<p>Nos canais do Slack da comunidade Fluent Bit, as perguntas mais comuns s\u00e3o sobre como depurar as coisas quando elas n\u00e3o est\u00e3o funcionando. Minhas duas recomenda\u00e7\u00f5es aqui s\u00e3o:<\/p>\n<ol>\n<li><strong>Use o <code>sa\u00edda<\/code> plugin.<\/strong><\/li>\n<li><strong>Aumente o n\u00edvel de registro do Fluent Bit.<\/strong><\/li>\n<\/ol>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Minha primeira sugest\u00e3o seria simplificar. A maioria dos usu\u00e1rios do Fluent Bit est\u00e1 tentando canalizar os logs para uma pilha maior, por exemplo, Elastic-Fluentd-Kibana (EFK) ou <a href=\"https:\/\/grafana.com\/products\/enterprise\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Prometheus-Loki-Grafana<\/a> (PLG). Para come\u00e7ar, n\u00e3o olhe para o que o Kibana ou o Grafana est\u00e3o lhe dizendo at\u00e9 que voc\u00ea tenha removido todos os poss\u00edveis problemas com o encanamento na pilha de sua escolha.<\/p>\n<p><a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/outputs\/standard-output\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Use o <code>sa\u00edda<\/code> plug-in<\/a> para determinar o que o Fluent Bit acha que \u00e9 a sa\u00edda. Em seguida, itere at\u00e9 obter a sa\u00edda m\u00faltipla do Fluent Bit que voc\u00ea estava esperando. \u00c9 muito mais f\u00e1cil come\u00e7ar aqui do que lidar com todas as partes m\u00f3veis de uma pilha EFK ou PLG.<\/p>\n<p>Minha segunda dica de depura\u00e7\u00e3o \u00e9 <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/configuring-fluent-bit\/classic-mode\/configuration-file#config_section\" target=\"_blank\" rel=\"noopener\">aumentar o n\u00edvel de registro<\/a>. Essa etapa torna \u00f3bvio o que o Fluent Bit est\u00e1 tentando encontrar e\/ou analisar. Em muitos casos, o aumento do n\u00edvel de registro destaca corre\u00e7\u00f5es simples, como problemas de permiss\u00f5es ou o uso do curinga\/caminho errado.<\/p>\n<h3 id=\"helm\">Considera\u00e7\u00f5es sobre as verifica\u00e7\u00f5es de integridade do Helm<\/h3>\n<p>Se estiver usando o Helm, ative o servidor HTTP para verifica\u00e7\u00f5es de integridade se tiver ativado essas sondas.<\/p>\n<p>O Helm \u00e9 bom para uma instala\u00e7\u00e3o simples, mas como \u00e9 uma ferramenta gen\u00e9rica, voc\u00ea precisa garantir que a configura\u00e7\u00e3o do Helm seja aceit\u00e1vel. Se voc\u00ea habilitar as sondas de verifica\u00e7\u00e3o de integridade no Kubernetes, tamb\u00e9m precisar\u00e1 habilitar o endpoint para elas na configura\u00e7\u00e3o do Fluent Bit.<\/p>\n<p>As vers\u00f5es mais recentes do Fluent Bit t\u00eam <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#health-check-for-fluent-bit\" target=\"_blank\" rel=\"noopener\">uma verifica\u00e7\u00e3o de sa\u00fade dedicada<\/a> (que tamb\u00e9m usaremos na pr\u00f3xima vers\u00e3o do Operador Aut\u00f4nomo do Couchbase).<\/p>\n<h2 id=\"parsing\">Dica #3: Transformando \u00e1gua em vinho com an\u00e1lise<\/h2>\n<p>Normalmente, voc\u00ea deseja analisar seus registros depois de l\u00ea-los. Eu uso <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/tail\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">o plug-in de entrada de cauda<\/a> para converter dados n\u00e3o estruturados em dados estruturados (por <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/key-concepts#structured-messages\" target=\"_blank\" rel=\"noopener\">a terminologia oficial<\/a>).<\/p>\n<h3 id=\"parsing-failure\">O fracasso n\u00e3o \u00e9 uma op\u00e7\u00e3o<\/h3>\n<p>Quando se trata da solu\u00e7\u00e3o de problemas do Fluent Bit, um ponto importante a ser lembrado \u00e9 que <strong>Se a an\u00e1lise falhar, voc\u00ea ainda obter\u00e1 a sa\u00edda<\/strong>. O analisador do Fluent Bit apenas fornece toda a linha de registro como um \u00fanico registro. Esse recurso de retorno \u00e9 um bom recurso do Fluent Bit, pois voc\u00ea nunca perde informa\u00e7\u00f5es e uma ferramenta de downstream diferente sempre pode analis\u00e1-las novamente.<\/p>\n<p>One helpful trick here is to ensure you never have the default `log` key in the record after parsing. If you see the `log` key, then you know that parsing has failed. It&#8217;s not always obvious otherwise.<\/p>\n<h3 id=\"multi-line-parsing\">Dica #4: Voc\u00ea n\u00e3o consegue lidar com a verdade (an\u00e1lise de v\u00e1rias linhas)<\/h3>\n<p><a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/configuring-fluent-bit\/multiline-parsing\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">An\u00e1lise de v\u00e1rias linhas<\/a> \u00e9 um recurso fundamental do Fluent Bit. Alguns registros s\u00e3o produzidos por processos Erlang ou Java que o utilizam extensivamente.<\/p>\n<p>O <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit#parsing\" target=\"_blank\" rel=\"noopener\">objetivo com an\u00e1lise de v\u00e1rias linhas<\/a> is to do an initial pass to extract a common set of information. For Couchbase logs, we settled on every log entry having a `timestamp`, `level` and `message` (with `message` being fairly open, since it contained anything not captured in the first two).<\/p>\n<p>O nome do arquivo de registro tamb\u00e9m \u00e9 usado como parte do <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/key-concepts#tag\" target=\"_blank\" rel=\"noopener\">a tag Fluent Bit<\/a>. Implementamos essa pr\u00e1tica porque voc\u00ea pode querer <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/router\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">rotear diferentes registros para destinos separados<\/a>Por exemplo <a href=\"https:\/\/cloud.google.com\/architecture\/exporting-stackdriver-logging-for-security-and-access-analytics\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">o registro de auditoria<\/a> tende a ser <a href=\"https:\/\/nvlpubs.nist.gov\/nistpubs\/Legacy\/SP\/nistspecialpublication800-92.pdf?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">um requisito de seguran\u00e7a<\/a>:<\/p>\n<pre>    @include \/fluent-bit\/etc\/fluent-bit.conf\r\n    [OUTPUT] \r\n        Name                         s3\r\n        Match                        couchbase.log.audit\r\n        ...\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Conforme mostrado acima (e <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog#example-amazon-s3\" target=\"_blank\" rel=\"noopener\">em mais detalhes aqui<\/a>), esse c\u00f3digo ainda envia todos os logs para a sa\u00edda padr\u00e3o por padr\u00e3o, mas tamb\u00e9m envia os logs de auditoria para o AWS S3.<\/p>\n<p>Vamos dar uma olhada em outro exemplo de an\u00e1lise de v\u00e1rias linhas com este passo a passo abaixo (e <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/conf\/couchbase\/in-erlang-multiline-log.conf\" target=\"_blank\" rel=\"noopener\">no GitHub aqui<\/a>):<\/p>\n<pre>[INPUT]\r\n    Name tail\r\n    Alias erlang_tail\r\n    # ^See note 1 below\r\n    Path ${COUCHBASE_LOGS}\/babysitter.log,${COUCHBASE_LOGS}\/couchdb.log,${COUCHBASE_LOGS}\/debug.log,${COUCHBASE_LOGS}\/json_rpc.log,${COUCHBASE_LOGS}\/metakv.log,${COUCHBASE_LOGS}\/ns_couchdb.log,${COUCHBASE_LOGS}\/reports.log\r\n    Multiline On\r\n    Parser_Firstline couchbase_erlang_multiline\r\n    Refresh_Interval 10\r\n    # ^See note 2\r\n    Skip_Long_Lines On\r\n    # ^See note 3\r\n    Skip_Empty_Lines On\r\n    # ^See note 4\r\n    Path_Key filename\r\n    # ^See note 5\r\n    # We want to tag with the name of the log so we can easily send named logs to different output destinations.\r\n    # This requires a bit of regex to extract the info we want.\r\n    Tag couchbase.log.\r\n    Tag_Regex ${COUCHBASE_LOGS}\/(?[^.]+).log$\r\n    # ^See note 6\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><strong>Observa\u00e7\u00f5es:<\/strong><br \/>\n[1] Especifique um alias para esse plug-in de entrada. Isso \u00e9 muito \u00fatil se houver um problema ou para rastrear m\u00e9tricas.<br \/>\n[2] A lista de registros \u00e9 atualizada a cada 10 segundos para coletar novos registros.<br \/>\n[3] Se voc\u00ea atingir uma linha longa, isso a ignorar\u00e1 em vez de interromper qualquer outra entrada. Lembre-se de que o Fluent Bit come\u00e7ou como uma solu\u00e7\u00e3o incorporada, portanto, muito do suporte a limites est\u00e1ticos est\u00e1 em vigor por padr\u00e3o.<br \/>\n[4] Uma adi\u00e7\u00e3o recente \u00e0 vers\u00e3o 1.8 foi a possibilidade de pular linhas vazias. Essa op\u00e7\u00e3o est\u00e1 ativada para manter o ru\u00eddo baixo e garantir que os testes automatizados ainda sejam aprovados.<br \/>\n[5] Certifique-se de adicionar a tag Fluent Bit filename no registro. Isso \u00e9 \u00fatil no downstream para filtragem.<br \/>\n[6] Tag por nome de arquivo. Nesse caso, usamos um regex para extrair o nome do arquivo, pois estamos trabalhando com v\u00e1rios arquivos.<\/p>\n<p>Uma recomenda\u00e7\u00e3o \u00f3bvia \u00e9 garantir que seu regex funcione por meio de testes. Voc\u00ea pode usar uma ferramenta on-line, como a:<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li><a href=\"https:\/\/rubular.com\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Rubular<\/a><\/li>\n<li><a href=\"https:\/\/regex101.com\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">RegEx101<\/a><\/li>\n<li><a href=\"https:\/\/cloud.calyptia.com\/#\/regex\" target=\"_blank\" rel=\"noopener\">Caliptia<\/a> (A Calyptia tamb\u00e9m tem uma ferramenta de visualiza\u00e7\u00e3o, e eu tenho <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/tools\/flatten-config.sh\" target=\"_blank\" rel=\"noopener\">um script para lidar com os arquivos inclu\u00eddos, para extrair tudo em um \u00fanico arquivo past\u00e1vel<\/a>.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>\u00c9 importante observar que, como sempre, h\u00e1 aspectos espec\u00edficos do mecanismo de regex usado pelo Fluent Bit, portanto, em \u00faltima an\u00e1lise, voc\u00ea tamb\u00e9m precisa testar esse aspecto. Por exemplo, certifique-se de que voc\u00ea <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/parsers\/regular-expression\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">nomear os grupos adequadamente<\/a> (alfanum\u00e9rico mais sublinhado apenas, sem h\u00edfens), pois isso pode causar problemas.<\/p>\n<p><strong>Dica: Se a regex n\u00e3o estiver funcionando, mesmo que <em>deve<\/em> - simplificar as coisas at\u00e9 que isso aconte\u00e7a.<\/strong><\/p>\n<p>O exemplo anterior do analisador multilinha do Fluent Bit lidou com as mensagens Erlang, que tinham a seguinte apar\u00eancia:<\/p>\n<pre>[ns_server:info,2021-03-09T17:31:55.351Z,babysitter_of_ns_1@cb.local:&lt;0.92.0&gt;:ns_babysitter:init_logging:136]Brought up babysitter logging\r\n[ns_server:debug,2021-03-09T17:31:55.373Z,babysitter_of_ns_1@cb.local:&lt;0.92.0&gt;:dist_manager:configure_net_kernel:293]Set net_kernel vebosity to 10 -&gt; 0\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>O snippet acima mostra apenas mensagens de linha \u00fanica para fins de brevidade, mas tamb\u00e9m h\u00e1 <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/babysitter.log#L2-L34\" target=\"_blank\" rel=\"noopener\">exemplos grandes e com v\u00e1rias linhas<\/a> nos testes. Lembre-se de que <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/parsers-couchbase.conf#L70\" target=\"_blank\" rel=\"noopener\">o analisador procura os colchetes<\/a> para indicar o in\u00edcio de cada mensagem de registro possivelmente com v\u00e1rias linhas:<\/p>\n<pre>[PARSER]\r\n    Name         couchbase_erlang_multiline\r\n    Format       regex\r\n    Regex        \\[(?\\w+):(?\\w+),(?\\d+-\\d+-\\d+T\\d+:\\d+:\\d+.\\d+Z),(?.*)$\r\n    Time_Key     timestamp\r\n    Time_Format  %Y-%m-%dT%H:%M:%S.%L\r\n    Time_Keep    On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<h3 id=\"timestamp\">Complica\u00e7\u00f5es e considera\u00e7\u00f5es sobre a an\u00e1lise de carimbo de data\/hora<\/h3>\n<p>Unfortunately, you can&#8217;t have a full regex for the `timestamp` field. If you have varied datetime formats, it will be hard to cope. For example, you can find <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/eventing.log#L2-L3\" target=\"_blank\" rel=\"noopener\">os seguintes formatos de registro de data e hora<\/a> <em>no mesmo arquivo de registro:<\/em><\/p>\n<pre>2021-03-09T17:32:15.545+00:00 [INFO] Using ... \r\n2021\/03\/09 17:32:15 audit: ...\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Na \u00e9poca do lan\u00e7amento da vers\u00e3o 1.7, n\u00e3o havia uma boa maneira de analisar formatos de carimbo de data\/hora em uma \u00fanica passagem. Portanto, para os logs do Couchbase, projetamos o Fluent Bit para ignorar qualquer falha na an\u00e1lise do carimbo de data\/hora do log e usamos apenas a hora da an\u00e1lise como o valor do Fluent Bit. A hora real n\u00e3o \u00e9 vital e deve ser pr\u00f3xima o suficiente.<\/p>\n<p>A an\u00e1lise de v\u00e1rios formatos na s\u00e9rie Fluent Bit 1.8 deve ser capaz de suportar uma melhor an\u00e1lise de carimbo de data\/hora. Por\u00e9m, at\u00e9 o momento em que este texto foi escrito, o Couchbase ainda n\u00e3o estava usando essa funcionalidade. O snippet abaixo mostra um exemplo de an\u00e1lise de v\u00e1rios formatos:<\/p>\n<pre># Cope with two different log formats, e.g.:\r\n# 2021\/03\/09 17:32:15 cbauth: ...\r\n# 2021-03-09T17:32:15.303+00:00 [INFO] ...\r\n# https:\/\/rubular.com\/r\/XUt7xQqEJnrF2M\r\n[PARSER]\r\n    Name         couchbase_simple_log_mixed\r\n    Format       regex\r\n    Regex        ^(?\\d+(-|\/)\\d+(-|\/)\\d+(T|\\s+)\\d+:\\d+:\\d+(\\.\\d+(\\+|-)\\d+:\\d+|))\\s+((\\[)?(?\\w+)(\\]|:))(?.*)$\r\n    Time_Key     timestamp\r\n    Time_Keep    On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Outro aspecto a ser observado aqui \u00e9 que o teste de regress\u00e3o automatizado \u00e9 obrigat\u00f3rio!<\/p>\n<h2 id=\"filtering\">Dica #5: Garimpagem de ouro com filtragem<\/h2>\n<p>Sou um grande f\u00e3 de <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/installation\/helm\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">a pilha Loki\/Grafana<\/a>Por isso, eu o usei bastante ao testar o encaminhamento de logs com o Couchbase.<\/p>\n<p>Um problema com a vers\u00e3o original do cont\u00eainer do Couchbase era que os n\u00edveis de registro n\u00e3o eram padronizados: voc\u00ea poderia obter coisas como <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/eventing.log#L1-L2\" target=\"_blank\" rel=\"noopener\">`INFO`, `Info`, `info`<\/a> com casos diferentes ou <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/logs\/analytics_debug.log#L2\" target=\"_blank\" rel=\"noopener\">DEBU, depurar, etc.<\/a> com diferentes cadeias de caracteres reais para o mesmo n\u00edvel. Essa falta de padroniza\u00e7\u00e3o dificultava a visualiza\u00e7\u00e3o e a filtragem no Grafana (ou na ferramenta de sua escolha) sem algum processamento extra.<\/p>\n<p>Com base em uma sugest\u00e3o de um usu\u00e1rio do Slack, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/conf\/couchbase\/filter-handle-levels.conf\" target=\"_blank\" rel=\"noopener\">Adicionei alguns filtros que efetivamente restringem todos os v\u00e1rios n\u00edveis em um \u00fanico n\u00edvel usando a seguinte enumera\u00e7\u00e3o<\/a>: `UNKNOWN`, `DEBUG`, `INFO`, `WARN`, `ERROR`. These Fluent Bit filters first start with the various corner cases and are then applied to make all levels consistent.<\/p>\n<p>Veja como isso funciona: Sempre que um campo \u00e9 <code>fixo<\/code> para um valor conhecido, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-levels.conf#L8-L9\" target=\"_blank\" rel=\"noopener\">uma chave tempor\u00e1ria extra \u00e9 adicionada<\/a> para ele. Essa chave tempor\u00e1ria a exclui de qualquer outra correspond\u00eancia nesse conjunto de filtros. A chave <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-levels.conf#L75-L80\" target=\"_blank\" rel=\"noopener\">a chave tempor\u00e1ria \u00e9 ent\u00e3o removida<\/a> no final. Veja abaixo um exemplo:<\/p>\n<pre>[FILTER]\r\n    Name        modify\r\n    Alias       handle_levels_uppercase_error_modify\r\n    Match       couchbase.log.*\r\n    Condition   Key_value_matches                               level               (?i:ERRO\\w*)\r\n    Set         level                                           ERROR\r\n    # Make sure we don't re-match it\r\n    Condition   Key_value_does_not_equal                        __temp_level_fixed  Y\r\n    Set         __temp_level_fixed                              Y\r\n\u2026\r\n# Remove all \"temp\" vars here\r\n[FILTER]\r\n    Name           modify\r\n    Alias          handle_levels_remove_temp_vars_modify\r\n    Match          couchbase.log.*\r\n    Remove_regex   __temp_.+\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>No final, o conjunto restrito de resultados \u00e9 muito mais f\u00e1cil de usar.<\/p>\n<h3 id=\"filtering-options\">Dica #6: Como adicionar informa\u00e7\u00f5es opcionais<\/h3>\n<p>Uma coisa que voc\u00ea provavelmente vai querer incluir nos logs do Couchbase s\u00e3o dados extras, se estiverem dispon\u00edveis.<\/p>\n<p>Para meus pr\u00f3prios projetos, inicialmente usei <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/modify\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">A parte fluente <code>modificar<\/code> filtro<\/a> to add extra keys to the record. However, if certain variables weren&#8217;t defined then the `modify` filter would exit.<\/p>\n<p>Descobri mais tarde que voc\u00ea deve <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/record-modifier\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">usar o <code>modificador de registro<\/code> filtro<\/a> em vez disso. Esse filtro avisa se uma vari\u00e1vel n\u00e3o estiver definida, portanto, voc\u00ea pode us\u00e1-lo com um superconjunto das informa\u00e7\u00f5es que deseja incluir.<\/p>\n<p>Em resumo: <strong>If you want to add optional information to your log forwarding, use `record_modifier` instead of `modify`.<\/strong><\/p>\n<p>I&#8217;ve included an example of `record_modifier` below:<\/p>\n<pre>[FILTER]\r\n    Name record_modifier\r\n    Alias common_info_modifier\r\n    Match couchbase.log.*\r\n    Record hostname ${HOSTNAME}\r\n    Record logshipper couchbase.sidecar.fluentbit\r\n    # These should be built into the container\r\n    Record couchbase.logging.version ${COUCHBASE_FLUENTBIT_VERSION}\r\n    Record fluentbit.version ${FLUENTBIT_VERSION}\r\n    # The following are set by the operator from the pod meta-data, they may not exist on normal containers\r\n    Record pod.namespace ${POD_NAMESPACE}\r\n    Record pod.name ${POD_NAME}\r\n    Record pod.uid ${POD_UID}\r\n    # The following come from kubernetes annotations and labels set as env vars so also may not exist\r\n    Record couchbase.cluster ${couchbase_cluster}\r\n    Record couchbase.operator.version ${operator.couchbase.com\/version}\r\n    Record couchbase.server.version ${server.couchbase.com\/version}\r\n    Record couchbase.node ${couchbase_node}\r\n    Record couchbase.node-config ${couchbase_node_conf}\r\n    Record couchbase.server ${couchbase_server}\r\n    # These are config dependent so will trigger a failure if missing but this can be ignored\r\n    Record couchbase.analytics ${couchbase_service_analytics}\r\n    Record couchbase.data ${couchbase_service_data}\r\n    Record couchbase.eventing ${couchbase_service_eventing}\r\n    Record couchbase.index ${couchbase_service_index}\r\n    Record couchbase.query ${couchbase_service_query}\r\n    Record couchbase.search ${couchbase_service_search}\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Eu tamb\u00e9m uso <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/nest\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">o filtro Nest<\/a> to consolidate all the `couchbase.*` and `pod.*` information into nested JSON structures for output. By using the Nest filter, all downstream operations are simplified because the Couchbase-specific information is in a single nested structure, rather than having to parse the whole log record for everything. This is similar for pod information, which might be missing for on-premise information.<\/p>\n<h3 id=\"aliases\">Dica #7: Use pseud\u00f4nimos<\/h3>\n<p>Outra dica valiosa que voc\u00ea j\u00e1 deve ter notado nos exemplos at\u00e9 agora: <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#configuring-aliases\" target=\"_blank\" rel=\"noopener\">usar aliases<\/a>.<\/p>\n<p>Ao usar um alias para um filtro espec\u00edfico (ou entrada\/sa\u00edda), voc\u00ea tem um nome leg\u00edvel e agrad\u00e1vel nos logs e m\u00e9tricas do Fluent Bit, em vez de um n\u00famero dif\u00edcil de descobrir. Recomendo que voc\u00ea crie um processo de nomea\u00e7\u00e3o de alias de acordo com o local e a fun\u00e7\u00e3o do arquivo.<\/p>\n<p>A documenta\u00e7\u00e3o do Fluent Bit mostra a voc\u00ea <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#metrics-examples\" target=\"_blank\" rel=\"noopener\">como acessar m\u00e9tricas no formato Prometheus<\/a> com v\u00e1rios exemplos.<\/p>\n<p>Running with the Couchbase Fluent Bit image shows the following output instead of just `tail.0`, `tail.1` or similar with the filters:<\/p>\n<pre># HELP fluentbit_filter_drop_records_total Fluentbit metrics.\r\n# TYPE fluentbit_filter_drop_records_total counter\r\nfluentbit_filter_drop_records_total{name=\"common_info_modifier\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"couchbase_common_info_nest\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_filenames_add_missing_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_add_info_missing_level_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_add_unknown_missing_level_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_check_for_incorrect_level\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_remove_temp_vars_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_debug_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_error_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_info_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_warn_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_filename_in_log_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_message_unknown_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_msg_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_tail_filename_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_ts_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"parser.16\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"pod_common_info_nest\"} 0 1629194033696\r\n# HELP fluentbit_input_bytes_total Number of input bytes.\r\n# TYPE fluentbit_input_bytes_total counter\r\nfluentbit_input_bytes_total{name=\"audit_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"erlang_tail\"} 691360 1629194033696\r\nfluentbit_input_bytes_total{name=\"http_tail\"} 4302 1629194033696\r\nfluentbit_input_bytes_total{name=\"java_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"memcached_tail\"} 10623 1629194033696\r\nfluentbit_input_bytes_total{name=\"prometheus_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"rebalance_process_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"simple_mixed_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"simple_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"xdcr_tail\"} 26544 1629194033696\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>E se algo der errado nos registros, voc\u00ea n\u00e3o precisar\u00e1 perder tempo descobrindo qual plug-in pode ter causado o problema com base em seu ID num\u00e9rico.<\/p>\n<h3>Outra considera\u00e7\u00e3o sobre aliases<\/h3>\n<p>Se voc\u00ea estiver usando o Loki, como eu, poder\u00e1 ter outro problema com aliases.<\/p>\n<p>No meu caso, eu estava filtrando o arquivo de log usando o nome do arquivo. Embora o plug-in tail preencha automaticamente o nome do arquivo para voc\u00ea, infelizmente ele inclui o <em>caminho completo<\/em> do nome do arquivo. Mas o Grafana mostra apenas a primeira parte da cadeia de caracteres do nome do arquivo at\u00e9 que ela seja cortada, o que \u00e9 particularmente in\u00fatil, j\u00e1 que todos os registros est\u00e3o no mesmo local de qualquer maneira.<\/p>\n<p>O resultado final \u00e9 uma experi\u00eancia frustrante, como voc\u00ea pode ver abaixo.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-full-path-filename.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11822\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-full-path-filename.png\" alt=\"Full path filenames in the Loki log browser\" width=\"566\" height=\"607\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename.png 566w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-280x300.png 280w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-300x322.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-20x20.png 20w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Para resolver esse problema, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-filenames.conf#L1-L9\" target=\"_blank\" rel=\"noopener\">Adicionei um filtro extra que fornece um nome de arquivo reduzido e mant\u00e9m o original tamb\u00e9m<\/a>. Esse filtro requer um analisador simples, que inclu\u00ed abaixo:<\/p>\n<pre>[PARSER]\r\n    Name couchbase_filename_shortener\r\n    Format regex\r\n    Regex ^(?.*)\/(?.*)$\r\n\r\n[FILTER]\r\n    Name parser\r\n    Match couchbase.log.*\r\n    Key_Name filename\r\n    Parser couchbase_filename_shortener\r\n    # Do not overwrite original field\r\n    Preserve_Key On\r\n    # Keep everything else\r\n    Reserve_Data On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>With this parser in place, you get a simple filter with entries like `audit.log`, `babysitter.log`, etc. instead of full-path prefixes like `\/opt\/couchbase\/var\/lib\/couchbase\/logs\/`.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-parsed-filename.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11823\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-parsed-filename.png\" alt=\"Parsed filenames in the Loki log browser\" width=\"713\" height=\"645\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename.png 713w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename-300x271.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename-20x18.png 20w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<h2 id=\"lua-filter\">Dica #8: Filtro Lua: Todas as suas bases (de sof\u00e1) pertencem a n\u00f3s<\/h2>\n<p>A parte fluente <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/lua\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Filtro Lua<\/a> pode resolver praticamente todos os problemas. A quest\u00e3o, por\u00e9m, \u00e9, <em>Deveria?<\/em><\/p>\n<p>A imagem do Couchbase Fluent Bit <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/redaction\/redaction.lua#L48\" target=\"_blank\" rel=\"noopener\">inclui um pouco de c\u00f3digo Lua<\/a> para <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog#log-redaction-in-flight\" target=\"_blank\" rel=\"noopener\">suporte \u00e0 reda\u00e7\u00e3o por meio de hashing para campos espec\u00edficos nos registros do Couchbase<\/a>. O objetivo dessa reda\u00e7\u00e3o \u00e9 substituir os dados identific\u00e1veis por um hash que possa ser correlacionado entre os logs para fins de depura\u00e7\u00e3o sem vazar as informa\u00e7\u00f5es originais. Usando um filtro Lua, o Couchbase redige os registros em tempo real por meio do hash SHA-1 do conte\u00fado de qualquer coisa cercada por tags .. na mensagem de registro.<\/p>\n<p>Na FluentCon EU deste ano, <a href=\"https:\/\/youtu.be\/aj3jj6ayomg\" target=\"_blank\" rel=\"noopener\">Mike Marshall apresentou algumas dicas excelentes sobre o uso de filtros Lua com o Fluent Bit<\/a> incluindo <a href=\"https:\/\/fluentconeu21.sched.com\/event\/iKok\" target=\"_blank\" rel=\"noopener\">um Lua especial <code>camiseta<\/code> filtro<\/a> que permite que voc\u00ea toque em v\u00e1rios pontos do pipeline para ver o que est\u00e1 acontecendo. \u00c9 um filtro gen\u00e9rico que despeja todos os seus pares de valores-chave nesse ponto do pipeline, o que \u00e9 \u00fatil para criar uma visualiza\u00e7\u00e3o antes e depois de um determinado campo.<\/p>\n<h2 id=\"testing\">Dica #9: Teste, teste e teste novamente<\/h2>\n<p>Considerando todos esses v\u00e1rios recursos, a configura\u00e7\u00e3o do Couchbase Fluent Bit \u00e9 grande. Confira a imagem abaixo que mostra a configura\u00e7\u00e3o da vers\u00e3o 1.1.0 usando o visualizador Calyptia.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11820\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png\" alt=\"An architecture diagram of the Couchbase Fluent Bit configuration\" width=\"1000\" height=\"594\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-300x178.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-768x456.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-20x12.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Dado o tamanho dessa configura\u00e7\u00e3o, a equipe do Couchbase fez muitos testes para garantir que tudo se comporte conforme o esperado. A partir de todos esses testes, criei <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/test\/logs\" target=\"_blank\" rel=\"noopener\">exemplos de conjuntos de mensagens problem\u00e1ticas e os v\u00e1rios formatos em cada arquivo de registro<\/a> para usar como <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/test\/run-tests.sh\" target=\"_blank\" rel=\"noopener\">um conjunto de testes automatizados em rela\u00e7\u00e3o ao resultado esperado<\/a>. Tamb\u00e9m criei um cont\u00eainer de teste que executa todos esses testes; \u00e9 um cont\u00eainer de produ\u00e7\u00e3o com scripts e dados de teste sobrepostos. \u00c0 medida que a equipe encontrar novos problemas, estenderei os casos de teste.<\/p>\n<p>Essas ferramentas tamb\u00e9m ajudam voc\u00ea a fazer testes para melhorar o resultado. Por exemplo, se voc\u00ea estiver <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/conf\/couchbase\/filter-handle-filenames.conf#L1-L9\" target=\"_blank\" rel=\"noopener\">encurtando o nome do arquivo<\/a>Se voc\u00ea n\u00e3o estiver usando o sistema, poder\u00e1 usar essas ferramentas para v\u00ea-lo diretamente e confirmar se est\u00e1 funcionando corretamente.<\/p>\n<h3 id=\"testing-separation\">Dica #10: Separe suas \u00e1reas de preocupa\u00e7\u00e3o<\/h3>\n<p>Cada parte do <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/conf\/couchbase\" target=\"_blank\" rel=\"noopener\">A configura\u00e7\u00e3o do Couchbase Fluent Bit \u00e9 dividida em um arquivo separado<\/a>. H\u00e1 um arquivo por plugin de cauda, um arquivo para cada conjunto de filtros comuns e um para cada plugin de sa\u00edda. Eu o projetei dessa forma por dois motivos principais:<\/p>\n<ol>\n<li>Reutiliza\u00e7\u00e3o simples de diferentes configura\u00e7\u00f5es<\/li>\n<li>Testes<\/li>\n<\/ol>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Couchbase provides a default configuration, but you&#8217;ll likely want to tweak what logs you want parsed and how. You can just `@include` the specific part of <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/tools\/loki-stack\/fluent-bit.conf\" target=\"_blank\" rel=\"noopener\">a configura\u00e7\u00e3o que voc\u00ea deseja<\/a>Por exemplo, se voc\u00ea quiser apenas a an\u00e1lise e a sa\u00edda de logs de auditoria, poder\u00e1 incluir apenas isso. N\u00e3o h\u00e1 necessidade de escrever a configura\u00e7\u00e3o diretamente, o que poupa o esfor\u00e7o de aprender todas as op\u00e7\u00f5es e reduz os erros.<\/p>\n<p>Essa configura\u00e7\u00e3o dividida tamb\u00e9m simplifica os testes automatizados. Por exemplo, voc\u00ea pode simplesmente <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/test\/run-tests.sh#L173-L186\" target=\"_blank\" rel=\"noopener\">inclua a configura\u00e7\u00e3o da cauda e, em seguida, adicione um <code>read_from_head<\/code> para que ele leia todas as entradas<\/a>. Eu mostrei isso abaixo<\/p>\n<pre>cat &gt; \"$testConfig\" &lt;&lt; __FB_EOF\r\n@include \/fluent-bit\/test\/conf\/test-service.conf\r\n\r\n# Now we include the configuration we want to test which should cover the logfile as well.\r\n# We cannot exit when done as this then pauses the rest of the pipeline so leads to a race getting chunks out.\r\n# https:\/\/github.com\/fluent\/fluent-bit\/issues\/3274\r\n# Instead we rely on a timeout ending the test case.\r\n@include $i\r\n    Read_from_head On\r\n\r\n@include \/fluent-bit\/test\/conf\/test-filters.conf\r\n@include \/fluent-bit\/test\/conf\/test-output.conf\r\n__FB_EOF\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Mas h\u00e1 uma advert\u00eancia: <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L89\" target=\"_blank\" rel=\"noopener\">Certifique-se de testar tamb\u00e9m a configura\u00e7\u00e3o geral em conjunto<\/a>. Recentemente me deparei com um <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3858\" target=\"_blank\" rel=\"noopener\">problema em que cometi um erro de digita\u00e7\u00e3o no nome do include<\/a> when used in the overall configuration. Adding a call to `&#8211;dry-run` picked this up in automated testing, as shown below:<\/p>\n<pre>if \"${COUCHBASE_LOGS_BINARY}\" --dry-run --config=\"$i\"; then\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Isso valida que a configura\u00e7\u00e3o est\u00e1 correta o suficiente para passar nas verifica\u00e7\u00f5es est\u00e1ticas. Lembre-se de que ainda pode haver falhas durante o tempo de execu\u00e7\u00e3o quando ele carrega determinados plug-ins com essa configura\u00e7\u00e3o. Nesses casos, aumentar o n\u00edvel de registro normalmente ajuda (consulte a Dica #2 acima).<\/p>\n<h3>Espere o inesperado durante o teste<\/h3>\n<p>When you&#8217;re testing or troubleshooting in Fluent Bit, it&#8217;s important to remember that every log message should contain certain fields (like `message`, `level`, and `timestamp`) and not others (like `log`).<\/p>\n<p>Essa distin\u00e7\u00e3o \u00e9 particularmente \u00fatil quando voc\u00ea deseja testar uma nova entrada de registro, mas n\u00e3o tem uma sa\u00edda de ouro para comparar. Por exemplo, quando estiver testando <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/1.1.0\/tools\/integration-test\" target=\"_blank\" rel=\"noopener\">uma nova vers\u00e3o do Couchbase Server<\/a> e ele est\u00e1 produzindo registros ligeiramente diferentes. Minha recomenda\u00e7\u00e3o \u00e9 <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L58-L78\" target=\"_blank\" rel=\"noopener\">usar o <code>Esperar<\/code> plug-in para sair quando uma condi\u00e7\u00e3o de falha for encontrada e acionar uma falha de teste dessa forma<\/a>.<\/p>\n<p><strong>Infelizmente <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3268\" target=\"_blank\" rel=\"noopener\">Atualmente, o Fluent Bit \u00e9 encerrado com um c\u00f3digo 0, mesmo em caso de falha<\/a>, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L70\" target=\"_blank\" rel=\"noopener\">portanto, voc\u00ea precisa analisar a sa\u00edda<\/a> para verificar por que ele foi encerrado.<\/strong> You should also run with a timeout in this case rather than an `exit_when_done`. Otherwise, you&#8217;ll <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3274\" target=\"_blank\" rel=\"noopener\">aciona uma sa\u00edda assim que o arquivo de entrada chega ao fim<\/a> que pode ser antes de voc\u00ea ter liberado toda a sa\u00edda para o diff:<\/p>\n<pre>timeout -s 9 \"${EXPECT_TEST_TIMEOUT}\" \"${COUCHBASE_LOGS_BINARY}\" --config \"$testConfig\" &gt; \"$testLog\" 2&gt;&amp;1\r\n# Currently it always exits with 0 so we have to check for a specific error message.\r\n# https:\/\/github.com\/fluent\/fluent-bit\/issues\/3268\r\nif grep -iq -e \"exception on rule\" -e \"invalid config\" \"$testLog\" ; then\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Tamb\u00e9m preciso manter o script de teste funcional tanto para o Busybox (o cont\u00eainer de depura\u00e7\u00e3o oficial) quanto para o <a href=\"https:\/\/developers.redhat.com\/products\/rhel\/ubi\" target=\"_blank\" rel=\"noopener\">UBI<\/a> (o cont\u00eainer da Red Hat), que \u00e0s vezes limita os recursos do Bash ou os bin\u00e1rios extras usados.<\/p>\n<h2 id=\"red-hat-openshift\">Dica #11: Como usar o Fluent Bit com o Red Hat OpenShift<\/h2>\n<p>H\u00e1 <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/install-openshift.html?ref=blog\" target=\"_blank\" rel=\"noopener\">um operador aut\u00f4nomo do Couchbase para o Red Hat OpenShift<\/a> que exige que todos os cont\u00eaineres passem por v\u00e1rias verifica\u00e7\u00f5es para certifica\u00e7\u00e3o. Uma dessas verifica\u00e7\u00f5es \u00e9 que a imagem base seja UBI ou RHEL.<\/p>\n<p>A equipe do Couchbase usa a imagem oficial do Fluent Bit para tudo, exceto para o OpenShift, e n\u00f3s <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/Dockerfile.rhel\" target=\"_blank\" rel=\"noopener\">constru\u00ed-lo a partir da fonte em uma imagem de base UBI<\/a> para o cat\u00e1logo de cont\u00eaineres da Red Hat. N\u00f3s o criamos a partir do c\u00f3digo-fonte para que o n\u00famero da vers\u00e3o seja especificado, j\u00e1 que atualmente o reposit\u00f3rio Yum fornece apenas a vers\u00e3o mais recente. Al\u00e9m disso, ele \u00e9 <a href=\"https:\/\/docs.fluentbit.io\/manual\/installation\/linux\/redhat-centos\" target=\"_blank\" rel=\"noopener\">um alvo CentOS 7<\/a> RPM que aumenta a imagem se ela for implantada com todos os RPMs de suporte adicionais para execu\u00e7\u00e3o no UBI 8.<\/p>\n<p>H\u00e1 um exemplo no reposit\u00f3rio que mostra <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/tools\/ubi7\" target=\"_blank\" rel=\"noopener\">como usar os RPMs diretamente<\/a> tamb\u00e9m.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Espero que essas dicas e truques tenham ajudado voc\u00ea a usar melhor o Fluent Bit para encaminhamento de logs e gerenciamento de logs de auditoria com o Couchbase.<\/p>\n<p>Escolhemos o Fluent Bit para que seus logs do Couchbase tivessem um formato comum com configura\u00e7\u00e3o din\u00e2mica. Tamb\u00e9m quer\u00edamos usar um padr\u00e3o do setor com o m\u00ednimo de sobrecarga para facilitar o trabalho de usu\u00e1rios como voc\u00ea.<\/p>\n<p>Se voc\u00ea estiver interessado em saber mais, apresentarei um mergulho mais profundo nesse mesmo conte\u00fado em <a href=\"https:\/\/fluentconna21.sched.com\/event\/mEE3\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">a pr\u00f3xima FluentCon<\/a>. Espero v\u00ea-lo l\u00e1.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 30px\" aria-hidden=\"true\"><\/div>\n<div style=\"text-align: center\"><strong>Fa\u00e7a um test drive do Fluent Bit + Couchbase:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Fa\u00e7a o download do Couchbase Server 7 hoje mesmo<\/a><\/strong><\/div>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Log forwarding and processing with Couchbase is easier than ever. We have support for log forwarding and audit log management for both Couchbase Autonomous Operator (i.e., Kubernetes) and for on-prem Couchbase Server deployments. In both cases, log processing is powered [&hellip;]<\/p>","protected":false},"author":77454,"featured_media":11818,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,9284,1816,2322],"tags":[9239,2384,2313,1545,9277],"ppma_author":[9279],"class_list":["post-11816","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-autonomous-operator","category-couchbase-server","category-kubernetes","tag-fluent-bit","tag-grafana","tag-key-value","tag-kubernetes","tag-loki"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fluent Bit Examples with Tips &amp; Tricks for Log Forwarding<\/title>\n<meta name=\"description\" content=\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\" \/>\n<meta property=\"og:description\" content=\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-01T07:00:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:33:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"418\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Patrick Stephens, Senior Software Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Patrick Stephens, Senior Software Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"},\"author\":{\"name\":\"Patrick Stephens, Senior Software Engineer\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b\"},\"headline\":\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\",\"datePublished\":\"2021-09-01T07:00:17+00:00\",\"dateModified\":\"2025-06-14T04:33:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"},\"wordCount\":3535,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"keywords\":[\"Fluent Bit\",\"Grafana\",\"key value\",\"kubernetes\",\"Loki\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Autonomous Operator\",\"Couchbase Server\",\"Kubernetes\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\",\"name\":\"Fluent Bit Examples with Tips & Tricks for Log Forwarding\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"datePublished\":\"2021-09-01T07:00:17+00:00\",\"dateModified\":\"2025-06-14T04:33:25+00:00\",\"description\":\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"width\":1200,\"height\":628,\"caption\":\"Learn how to use Fluent Bit for log forwarding and processing from Couchbase with these DevOps tips\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b\",\"name\":\"Patrick Stephens, Senior Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a994b426058a61810b4baad40300bed9\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg\",\"caption\":\"Patrick Stephens, Senior Software Engineer\"},\"description\":\"Patrick Stephens is a Senior Software Engineer at Couchbase based in the UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/patrick-stephens\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Exemplos de bits fluentes com dicas e truques para encaminhamento de logs","description":"O encaminhamento e o processamento de registros com o Couchbase ficaram mais f\u00e1ceis. Veja exemplos, dicas e truques para aproveitar ao m\u00e1ximo o uso do Fluent Bit aqui.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase","og_description":"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-09-01T07:00:17+00:00","article_modified_time":"2025-06-14T04:33:25+00:00","og_image":[{"width":800,"height":418,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png","type":"image\/png"}],"author":"Patrick Stephens, Senior Software Engineer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png","twitter_misc":{"Written by":"Patrick Stephens, Senior Software Engineer","Est. reading time":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"},"author":{"name":"Patrick Stephens, Senior Software Engineer","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b"},"headline":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase","datePublished":"2021-09-01T07:00:17+00:00","dateModified":"2025-06-14T04:33:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"},"wordCount":3535,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","keywords":["Fluent Bit","Grafana","key value","kubernetes","Loki"],"articleSection":["Best Practices and Tutorials","Couchbase Autonomous Operator","Couchbase Server","Kubernetes"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","name":"Exemplos de bits fluentes com dicas e truques para encaminhamento de logs","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","datePublished":"2021-09-01T07:00:17+00:00","dateModified":"2025-06-14T04:33:25+00:00","description":"O encaminhamento e o processamento de registros com o Couchbase ficaram mais f\u00e1ceis. Veja exemplos, dicas e truques para aproveitar ao m\u00e1ximo o uso do Fluent Bit aqui.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","width":1200,"height":628,"caption":"Learn how to use Fluent Bit for log forwarding and processing from Couchbase with these DevOps tips"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b","name":"Patrick Stephens, engenheiro de software s\u00eanior","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a994b426058a61810b4baad40300bed9","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","caption":"Patrick Stephens, Senior Software Engineer"},"description":"Patrick Stephens \u00e9 engenheiro de software s\u00eanior da Couchbase, com sede no Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/patrick-stephens\/"}]}},"authors":[{"term_id":9279,"user_id":77454,"is_guest":0,"slug":"patrick-stephens","display_name":"Patrick Stephens, Senior Software Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg"},"author_category":"","last_name":"Stephens","first_name":"Patrick","job_title":"","user_url":"","description":"Patrick Stephens \u00e9 engenheiro de software s\u00eanior da Couchbase, com sede no Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/77454"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=11816"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11816\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/11818"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=11816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=11816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=11816"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=11816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}