CINXE.COM
Blog | Fluentd
<!DOCTYPE html> <!--[if IE 8]> <html lang="en" class="ie8"> <![endif]--> <!--[if IE 9]> <html lang="en" class="ie9"> <![endif]--> <!--[if !IE]><!--> <html lang="en"> <!--<![endif]--> <head> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/19578475.js"></script> <!-- End of HubSpot Embed Code --> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-93T2VC0VBC"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-93T2VC0VBC'); </script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"ec9dce3a04","applicationID":"11800138","transactionName":"IVldTUZYXlhcQRgwCgxXR0tVGGFdV1JDEQJYDHJJRFtbV1hHXgwNTXF2bRQYUFhWVBg=","queueTime":4,"applicationTime":12,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"ec9dce3a04",applicationID:"11800138"};;/*! For license information please see nr-loader-rum-1.286.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{fn:()=>s,x1:()=>c});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=function(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},5217:(e,t,r)=>{"use strict";r.d(t,{gD:()=>h,xN:()=>m});r(860).K7.genericEvents;const n="experimental.marks",i="experimental.measures",o="experimental.resources",a=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var s=r(2614),c=r(944),u=r(384),d=r(8122);const l="[data-nr-mask]",f=()=>{const e={feature_flags:[],experimental:{marks:!1,measures:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{get capture_marks(){return e.feature_flags.includes(n)||e.experimental.marks},set capture_marks(t){e.experimental.marks=t},get capture_measures(){return e.feature_flags.includes(i)||e.experimental.measures},set capture_measures(t){e.experimental.measures=t},capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:s.wk,inactiveMs:s.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){a(t)?e.mask_selector="".concat(t,",").concat(l):""===t||null===t?e.mask_selector=l:(0,c.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){a(t)?e.block_selector+=",".concat(t):""!==t&&(0,c.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,c.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},spa:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}},g={},p="All configuration objects require an agent identifier!";function m(e,t){if(!e)throw new Error(p);g[e]=(0,d.a)(t,f());const r=(0,u.nY)(e);r&&(r.init=g[e])}function h(e,t){if(!e)throw new Error(p);var r=function(e){if(!e)throw new Error(p);if(!g[e])throw new Error("Configuration for ".concat(e," was never set"));return g[e]}(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0,harvester:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.286.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},3241:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(6154);const i="newrelic";function o(e={}){try{n.gm.dispatchEvent(new CustomEvent(i,{detail:e}))}catch(e){}}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=m(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=v()[s[e]];p&&p.push([f,e,r,a]);return a},get:h,listeners:m,context:g,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=m(e).concat(t)}function m(e){return n[e]||[]}function h(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5701:(e,t,r)=>{"use strict";r.d(t,{B:()=>a,t:()=>s});var n=r(7836),i=r(3241);const o=new Set,a={};function s(e,t){const r=n.ee.get(t);a[t]??={},e&&"object"==typeof e&&(o.has(t)||(r.emit("rumresp",[e]),a[t]=e,o.add(t),(0,i.W)({agentIdentifier:t,loaded:!0,drained:!0,type:"lifecycle",name:"load",feature:void 0,data:e})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>o,ET:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},a="log";n.K7.logging},8154:(e,t,r)=>{"use strict";r.d(t,{z_:()=>o,XG:()=>s,TZ:()=>n,rs:()=>i,xV:()=>a});r(6154),r(9566),r(384);const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>V});var n=r(860),i=r(2555),o=r(9908),a=r(1687),s=r(5289),c=r(6154),u=r(944),d=r(8154),l=r(384),f=r(6344);const g=["setErrorHandler","finished","addToTrace","addRelease","recordCustomEvent","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",f.G4.RECORD,f.G4.PAUSE,"log","wrapLogger"],p=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),h=r(2614),v=r(993);var b=r(7836),y=r(2646),w=r(3434);const R=new Map;function A(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,u.R)(29);const i=function(e){return(e||b.ee).get("logger")}(e),o=(0,w.YM)(i),a=new y.y(b.P);a.level=n.level,a.customAttributes=n.customAttributes;const s=t[r]?.[w.Jt]||t[r];return R.set(s,a),o.inPlace(t,[r],"wrap-logger-",(()=>R.get(s))),i}var E=r(3241),_=r(5701);function x(){const e=(0,l.pV)();g.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.runtime?e.exposed&&e[t]&&"micro-agent"!==e.runtime.loaderType&&n.push(e[t](...r)):(0,u.R)(38,t)})),n[0]}(t,...r)}))}const N={};function I(e,t){t||(0,a.Ak)(e.agentIdentifier,"api");const l=e.ee.get("tracer");N[e.agentIdentifier]=h.g.OFF,e.ee.on(f.G4.REPLAY_RUNNING,(t=>{N[e.agentIdentifier]=t}));const g="api-",b=g+"ixn-";function y(t,r,n,o){const a=e.info;return null===r?delete a.jsAttributes[t]:(0,i.x1)(e.agentIdentifier,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(g,n,!0,o||null===r?"session":void 0)(t,r)}function w(){}e.log=function(t,{customAttributes:r={},level:i=v.p_.INFO}={}){(0,o.p)(d.xV,["API/log/called"],void 0,n.K7.metrics,e.ee),function(e,t,r={},i=v.p_.INFO){(0,o.p)(d.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,o.p)(v.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(e.ee,t,r,i)},e.wrapLogger=(t,r,{customAttributes:i={},level:a=v.p_.INFO}={})=>{(0,o.p)(d.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,e.ee),A(e.ee,t,r,{customAttributes:i,level:a})},p.forEach((t=>{e[t]=x(g,t,!0,"api")})),e.addPageAction=x(g,"addPageAction",!0,n.K7.genericEvents),e.recordCustomEvent=x(g,"recordCustomEvent",!0,n.K7.genericEvents),e.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),e.runtime.customTransaction=(r||"http://custom.transaction")+t,x(g,"setPageViewName",!0)()},e.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return y(e,t,"setCustomAttribute",r);(0,u.R)(40,typeof t)}else(0,u.R)(39,typeof e)},e.setUserId=function(e){if("string"==typeof e||null===e)return y("enduser.id",e,"setUserId",!0);(0,u.R)(41,typeof e)},e.setApplicationVersion=function(e){if("string"==typeof e||null===e)return y("application.version",e,"setApplicationVersion",!1);(0,u.R)(42,typeof e)},e.start=()=>{try{(0,o.p)(d.xV,["API/start/called"],void 0,n.K7.metrics,e.ee),e.ee.emit("manual-start-all")}catch(e){(0,u.R)(23,e)}},e[f.G4.RECORD]=function(){(0,o.p)(d.xV,["API/recordReplay/called"],void 0,n.K7.metrics,e.ee),(0,o.p)(f.G4.RECORD,[],void 0,n.K7.sessionReplay,e.ee)},e[f.G4.PAUSE]=function(){(0,o.p)(d.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,e.ee),(0,o.p)(f.G4.PAUSE,[],void 0,n.K7.sessionReplay,e.ee)},e.interaction=function(e){return(new w).get("object"==typeof e?e:{})};const R=w.prototype={createTracer:function(t,r){var i={},a=this,s="function"==typeof r;return(0,o.p)(d.xV,["API/createTracer/called"],void 0,n.K7.metrics,e.ee),e.runSoftNavOverSpa||(0,o.p)(b+"tracer",[(0,m.t)(),t,i],a,n.K7.spa,e.ee),function(){if(l.emit((s?"":"no-")+"fn-start",[(0,m.t)(),a,s],i),s)try{return r.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw l.emit("fn-err",[arguments,this,t],i),t}finally{l.emit("fn-end",[(0,m.t)()],i)}}}};function x(t,r,i,a){return function(){return(0,o.p)(d.xV,["API/"+r+"/called"],void 0,n.K7.metrics,e.ee),(0,E.W)({agentIdentifier:e.agentIdentifier,drained:!!_.B?.[e.agentIdentifier],type:"data",name:"api",feature:t+r,data:{notSpa:i,bufferGroup:a}}),a&&(0,o.p)(t+r,[i?(0,m.t)():performance.now(),...arguments],i?null:this,a,e.ee),i?void 0:this}}function I(){r.e(296).then(r.bind(r,8778)).then((({setAsyncAPI:t})=>{t(e),(0,a.Ze)(e.agentIdentifier,"api")})).catch((t=>{(0,u.R)(27,t),e.ee.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((t=>{R[t]=x(b,t,void 0,e.runSoftNavOverSpa?n.K7.softNav:n.K7.spa)})),e.setCurrentRouteName=e.runSoftNavOverSpa?x(b,"routeName",void 0,n.K7.softNav):x(g,"routeName",!0,n.K7.spa),e.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,o.p)(d.xV,["API/noticeError/called"],void 0,n.K7.metrics,e.ee),(0,o.p)("err",[t,(0,m.t)(),!1,r,!!N[e.agentIdentifier]],void 0,n.K7.jserrors,e.ee)},c.RI?(0,s.GG)((()=>I()),!0):I(),!0}var k=r(5217),S=r(8122);const T={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},O={};var j=r(3371);const P=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e},K=new Set;function V(e,t={},r,n){let{init:o,info:a,loader_config:s,runtime:u={},exposed:d=!0}=t;u.loaderType=r;const f=(0,l.pV)();a||(o=f.init,a=f.info,s=f.loader_config),(0,k.xN)(e.agentIdentifier,o||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");O[e]=(0,S.a)(t,T);const r=(0,l.nY)(e);r&&(r.loader_config=O[e])}(e.agentIdentifier,s||{}),a.jsAttributes??={},c.bv&&(a.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,a);const g=e.init,p=[a.beacon,a.errorBeacon];K.has(e.agentIdentifier)||(g.proxy.assets&&(P(g.proxy.assets),p.push(g.proxy.assets)),g.proxy.beacon&&p.push(g.proxy.beacon),x(),(0,l.US)("activatedFeatures",_.B),e.runSoftNavOverSpa&&=!0===g.soft_navigations.enabled&&g.feature_flags.includes("soft_nav")),u.denyList=[...g.ajax.deny_list||[],...g.ajax.block_internal?p:[]],u.ptid=e.agentIdentifier,(0,j.V)(e.agentIdentifier,u),K.has(e.agentIdentifier)||(e.ee=b.ee.get(e.agentIdentifier),e.exposed=d,I(e,n),(0,E.W)({agentIdentifier:e.agentIdentifier,drained:!!_.B?.[e.agentIdentifier],type:"lifecycle",name:"initialize",feature:void 0,data:e.config})),K.add(e.agentIdentifier)}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>d,K7:()=>c,P3:()=>u,XX:()=>i,Yy:()=>s,df:()=>o,qY:()=>n,v4:()=>a});const n="events",i="jserrors",o="browser/blobs",a="rum",s="browser/logs",c={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},u={[c.pageViewEvent]:1,[c.pageViewTiming]:2,[c.metrics]:3,[c.jserrors]:4,[c.spa]:5,[c.ajax]:6,[c.sessionTrace]:7,[c.softNav]:8,[c.sessionReplay]:9,[c.logging]:10,[c.genericEvents]:11},d={[c.pageViewEvent]:a,[c.pageViewTiming]:n,[c.ajax]:n,[c.spa]:n,[c.softNav]:n,[c.metrics]:i,[c.jserrors]:i,[c.sessionTrace]:o,[c.sessionReplay]:o,[c.logging]:s,[c.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.286.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.286.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-+MkNp41sKZ0iYMHsept2X5HfDqyTLnDR9rprfuuxTRn6FVcYOei0L1PleWwmSuU2wrJDnMXcNYjTfSPQ3xYU/w=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={374:0,840:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.286.0.PROD"]=self["webpackChunk:NRBA-1.286.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(){this.agentIdentifier=(0,r.LA)(16)}#e(t,...r){if(this[t]!==n.prototype[t])return this[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}recordCustomEvent(e,t){return this.#e("recordCustomEvent",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if(this[t]!==o.prototype[t]&&this[t]!==n.prototype[t])return this[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(5217);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),m=i(384);const h=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function v(e){return!!(0,m.dV)().o.MO&&h(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(h(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),t.runtime.harvester.initializedAggregates.push(this.featAggregate),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return v(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class R extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var A=i(9908),E=i(2843),_=i(3878),x=i(782),N=i(1863);class I extends y{static featureName=x.T;constructor(e,t=!0){super(e,x.T,t),p.RI&&((0,E.u)((()=>(0,A.p)("docHidden",[(0,N.t)()],void 0,x.T,this.ee)),!0),(0,_.sp)("pagehide",(()=>(0,A.p)("winPagehide",[(0,N.t)()],void 0,x.T,this.ee))),this.importAggregator(e))}}var k=i(8154);class S extends y{static featureName=k.TZ;constructor(e,t=!0){super(e,k.TZ,t),p.RI&&document.addEventListener("securitypolicyviolation",(e=>{(0,A.p)(k.xV,["Generic/CSPViolation/Detected"],void 0,this.featureName,this.ee)})),this.importAggregator(e)}}new class extends o{constructor(t){super(),p.gm?(this.features={},(0,m.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,m.Zm)();delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,I,S],loaderType:"lite"})})()})();</script> <link href="/favicon.ico" rel="icon" type="image/x-icon" /> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <!-- Meta --> <meta charset="utf-8"> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"ec9dce3a04","applicationID":"11800138","transactionName":"IVldTUZYXlhcQRgwCgxXR0tVGGFdV1JDEQJYDHJJRFtbV1hHXgwNTXF2bRQYUFhWVBg=","queueTime":4,"applicationTime":13,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"ec9dce3a04",applicationID:"11800138"};;/*! For license information please see nr-loader-rum-1.286.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{fn:()=>s,x1:()=>c});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=function(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},5217:(e,t,r)=>{"use strict";r.d(t,{gD:()=>h,xN:()=>m});r(860).K7.genericEvents;const n="experimental.marks",i="experimental.measures",o="experimental.resources",a=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var s=r(2614),c=r(944),u=r(384),d=r(8122);const l="[data-nr-mask]",f=()=>{const e={feature_flags:[],experimental:{marks:!1,measures:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{get capture_marks(){return e.feature_flags.includes(n)||e.experimental.marks},set capture_marks(t){e.experimental.marks=t},get capture_measures(){return e.feature_flags.includes(i)||e.experimental.measures},set capture_measures(t){e.experimental.measures=t},capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:s.wk,inactiveMs:s.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){a(t)?e.mask_selector="".concat(t,",").concat(l):""===t||null===t?e.mask_selector=l:(0,c.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){a(t)?e.block_selector+=",".concat(t):""!==t&&(0,c.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,c.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},spa:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}},g={},p="All configuration objects require an agent identifier!";function m(e,t){if(!e)throw new Error(p);g[e]=(0,d.a)(t,f());const r=(0,u.nY)(e);r&&(r.init=g[e])}function h(e,t){if(!e)throw new Error(p);var r=function(e){if(!e)throw new Error(p);if(!g[e])throw new Error("Configuration for ".concat(e," was never set"));return g[e]}(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0,harvester:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.286.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},3241:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(6154);const i="newrelic";function o(e={}){try{n.gm.dispatchEvent(new CustomEvent(i,{detail:e}))}catch(e){}}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=m(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=v()[s[e]];p&&p.push([f,e,r,a]);return a},get:h,listeners:m,context:g,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=m(e).concat(t)}function m(e){return n[e]||[]}function h(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5701:(e,t,r)=>{"use strict";r.d(t,{B:()=>a,t:()=>s});var n=r(7836),i=r(3241);const o=new Set,a={};function s(e,t){const r=n.ee.get(t);a[t]??={},e&&"object"==typeof e&&(o.has(t)||(r.emit("rumresp",[e]),a[t]=e,o.add(t),(0,i.W)({agentIdentifier:t,loaded:!0,drained:!0,type:"lifecycle",name:"load",feature:void 0,data:e})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>o,ET:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},a="log";n.K7.logging},8154:(e,t,r)=>{"use strict";r.d(t,{z_:()=>o,XG:()=>s,TZ:()=>n,rs:()=>i,xV:()=>a});r(6154),r(9566),r(384);const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>V});var n=r(860),i=r(2555),o=r(9908),a=r(1687),s=r(5289),c=r(6154),u=r(944),d=r(8154),l=r(384),f=r(6344);const g=["setErrorHandler","finished","addToTrace","addRelease","recordCustomEvent","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",f.G4.RECORD,f.G4.PAUSE,"log","wrapLogger"],p=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),h=r(2614),v=r(993);var b=r(7836),y=r(2646),w=r(3434);const R=new Map;function A(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,u.R)(29);const i=function(e){return(e||b.ee).get("logger")}(e),o=(0,w.YM)(i),a=new y.y(b.P);a.level=n.level,a.customAttributes=n.customAttributes;const s=t[r]?.[w.Jt]||t[r];return R.set(s,a),o.inPlace(t,[r],"wrap-logger-",(()=>R.get(s))),i}var E=r(3241),_=r(5701);function x(){const e=(0,l.pV)();g.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.runtime?e.exposed&&e[t]&&"micro-agent"!==e.runtime.loaderType&&n.push(e[t](...r)):(0,u.R)(38,t)})),n[0]}(t,...r)}))}const N={};function I(e,t){t||(0,a.Ak)(e.agentIdentifier,"api");const l=e.ee.get("tracer");N[e.agentIdentifier]=h.g.OFF,e.ee.on(f.G4.REPLAY_RUNNING,(t=>{N[e.agentIdentifier]=t}));const g="api-",b=g+"ixn-";function y(t,r,n,o){const a=e.info;return null===r?delete a.jsAttributes[t]:(0,i.x1)(e.agentIdentifier,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(g,n,!0,o||null===r?"session":void 0)(t,r)}function w(){}e.log=function(t,{customAttributes:r={},level:i=v.p_.INFO}={}){(0,o.p)(d.xV,["API/log/called"],void 0,n.K7.metrics,e.ee),function(e,t,r={},i=v.p_.INFO){(0,o.p)(d.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,o.p)(v.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(e.ee,t,r,i)},e.wrapLogger=(t,r,{customAttributes:i={},level:a=v.p_.INFO}={})=>{(0,o.p)(d.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,e.ee),A(e.ee,t,r,{customAttributes:i,level:a})},p.forEach((t=>{e[t]=x(g,t,!0,"api")})),e.addPageAction=x(g,"addPageAction",!0,n.K7.genericEvents),e.recordCustomEvent=x(g,"recordCustomEvent",!0,n.K7.genericEvents),e.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),e.runtime.customTransaction=(r||"http://custom.transaction")+t,x(g,"setPageViewName",!0)()},e.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return y(e,t,"setCustomAttribute",r);(0,u.R)(40,typeof t)}else(0,u.R)(39,typeof e)},e.setUserId=function(e){if("string"==typeof e||null===e)return y("enduser.id",e,"setUserId",!0);(0,u.R)(41,typeof e)},e.setApplicationVersion=function(e){if("string"==typeof e||null===e)return y("application.version",e,"setApplicationVersion",!1);(0,u.R)(42,typeof e)},e.start=()=>{try{(0,o.p)(d.xV,["API/start/called"],void 0,n.K7.metrics,e.ee),e.ee.emit("manual-start-all")}catch(e){(0,u.R)(23,e)}},e[f.G4.RECORD]=function(){(0,o.p)(d.xV,["API/recordReplay/called"],void 0,n.K7.metrics,e.ee),(0,o.p)(f.G4.RECORD,[],void 0,n.K7.sessionReplay,e.ee)},e[f.G4.PAUSE]=function(){(0,o.p)(d.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,e.ee),(0,o.p)(f.G4.PAUSE,[],void 0,n.K7.sessionReplay,e.ee)},e.interaction=function(e){return(new w).get("object"==typeof e?e:{})};const R=w.prototype={createTracer:function(t,r){var i={},a=this,s="function"==typeof r;return(0,o.p)(d.xV,["API/createTracer/called"],void 0,n.K7.metrics,e.ee),e.runSoftNavOverSpa||(0,o.p)(b+"tracer",[(0,m.t)(),t,i],a,n.K7.spa,e.ee),function(){if(l.emit((s?"":"no-")+"fn-start",[(0,m.t)(),a,s],i),s)try{return r.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw l.emit("fn-err",[arguments,this,t],i),t}finally{l.emit("fn-end",[(0,m.t)()],i)}}}};function x(t,r,i,a){return function(){return(0,o.p)(d.xV,["API/"+r+"/called"],void 0,n.K7.metrics,e.ee),(0,E.W)({agentIdentifier:e.agentIdentifier,drained:!!_.B?.[e.agentIdentifier],type:"data",name:"api",feature:t+r,data:{notSpa:i,bufferGroup:a}}),a&&(0,o.p)(t+r,[i?(0,m.t)():performance.now(),...arguments],i?null:this,a,e.ee),i?void 0:this}}function I(){r.e(296).then(r.bind(r,8778)).then((({setAsyncAPI:t})=>{t(e),(0,a.Ze)(e.agentIdentifier,"api")})).catch((t=>{(0,u.R)(27,t),e.ee.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((t=>{R[t]=x(b,t,void 0,e.runSoftNavOverSpa?n.K7.softNav:n.K7.spa)})),e.setCurrentRouteName=e.runSoftNavOverSpa?x(b,"routeName",void 0,n.K7.softNav):x(g,"routeName",!0,n.K7.spa),e.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,o.p)(d.xV,["API/noticeError/called"],void 0,n.K7.metrics,e.ee),(0,o.p)("err",[t,(0,m.t)(),!1,r,!!N[e.agentIdentifier]],void 0,n.K7.jserrors,e.ee)},c.RI?(0,s.GG)((()=>I()),!0):I(),!0}var k=r(5217),S=r(8122);const T={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},O={};var j=r(3371);const P=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e},K=new Set;function V(e,t={},r,n){let{init:o,info:a,loader_config:s,runtime:u={},exposed:d=!0}=t;u.loaderType=r;const f=(0,l.pV)();a||(o=f.init,a=f.info,s=f.loader_config),(0,k.xN)(e.agentIdentifier,o||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");O[e]=(0,S.a)(t,T);const r=(0,l.nY)(e);r&&(r.loader_config=O[e])}(e.agentIdentifier,s||{}),a.jsAttributes??={},c.bv&&(a.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,a);const g=e.init,p=[a.beacon,a.errorBeacon];K.has(e.agentIdentifier)||(g.proxy.assets&&(P(g.proxy.assets),p.push(g.proxy.assets)),g.proxy.beacon&&p.push(g.proxy.beacon),x(),(0,l.US)("activatedFeatures",_.B),e.runSoftNavOverSpa&&=!0===g.soft_navigations.enabled&&g.feature_flags.includes("soft_nav")),u.denyList=[...g.ajax.deny_list||[],...g.ajax.block_internal?p:[]],u.ptid=e.agentIdentifier,(0,j.V)(e.agentIdentifier,u),K.has(e.agentIdentifier)||(e.ee=b.ee.get(e.agentIdentifier),e.exposed=d,I(e,n),(0,E.W)({agentIdentifier:e.agentIdentifier,drained:!!_.B?.[e.agentIdentifier],type:"lifecycle",name:"initialize",feature:void 0,data:e.config})),K.add(e.agentIdentifier)}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>d,K7:()=>c,P3:()=>u,XX:()=>i,Yy:()=>s,df:()=>o,qY:()=>n,v4:()=>a});const n="events",i="jserrors",o="browser/blobs",a="rum",s="browser/logs",c={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},u={[c.pageViewEvent]:1,[c.pageViewTiming]:2,[c.metrics]:3,[c.jserrors]:4,[c.spa]:5,[c.ajax]:6,[c.sessionTrace]:7,[c.softNav]:8,[c.sessionReplay]:9,[c.logging]:10,[c.genericEvents]:11},d={[c.pageViewEvent]:a,[c.pageViewTiming]:n,[c.ajax]:n,[c.spa]:n,[c.softNav]:n,[c.metrics]:i,[c.jserrors]:i,[c.sessionTrace]:o,[c.sessionReplay]:o,[c.logging]:s,[c.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.286.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.286.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-+MkNp41sKZ0iYMHsept2X5HfDqyTLnDR9rprfuuxTRn6FVcYOei0L1PleWwmSuU2wrJDnMXcNYjTfSPQ3xYU/w=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={374:0,840:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.286.0.PROD"]=self["webpackChunk:NRBA-1.286.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(){this.agentIdentifier=(0,r.LA)(16)}#e(t,...r){if(this[t]!==n.prototype[t])return this[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}recordCustomEvent(e,t){return this.#e("recordCustomEvent",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if(this[t]!==o.prototype[t]&&this[t]!==n.prototype[t])return this[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(5217);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),m=i(384);const h=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function v(e){return!!(0,m.dV)().o.MO&&h(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(h(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),t.runtime.harvester.initializedAggregates.push(this.featAggregate),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return v(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class R extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var A=i(9908),E=i(2843),_=i(3878),x=i(782),N=i(1863);class I extends y{static featureName=x.T;constructor(e,t=!0){super(e,x.T,t),p.RI&&((0,E.u)((()=>(0,A.p)("docHidden",[(0,N.t)()],void 0,x.T,this.ee)),!0),(0,_.sp)("pagehide",(()=>(0,A.p)("winPagehide",[(0,N.t)()],void 0,x.T,this.ee))),this.importAggregator(e))}}var k=i(8154);class S extends y{static featureName=k.TZ;constructor(e,t=!0){super(e,k.TZ,t),p.RI&&document.addEventListener("securitypolicyviolation",(e=>{(0,A.p)(k.xV,["Generic/CSPViolation/Detected"],void 0,this.featureName,this.ee)})),this.importAggregator(e)}}new class extends o{constructor(t){super(),p.gm?(this.features={},(0,m.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,m.Zm)();delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,I,S],loaderType:"lite"})})()})();</script> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content="Fluentd Project"> <meta name="google-site-verification" content="y_tydIQd6TZaoY-qR9geJSDX95h10_w4CXL6NznjgdI" /> <meta name="google-site-verification" content="Vf0Wxu5tJQx4sh-D-p93yVsmbSkkTIr8WF-O7ahvlkA" /> <!-- Title --> <title>Blog | Fluentd</title> <meta name="keywords" content="Fluentd, Unified Logging Layer, Data Collector, Log Collector, Log Management"> <meta property="og:title" content="Blog | Fluentd"> <meta name="twitter:title" content="Blog | Fluentd"> <!-- CSS Global Compulsory--> <link rel="stylesheet" type="text/css" href="/assets/application-86e13619371e815be96ae0b441eb3b570314624f182ab1b15553ee38f353cec0.css"> <!-- Highlight.js https://highlightjs.org/usage/ --> <link rel="stylesheet" href="/highlight/style/default.css"/> <script src="/highlight/highlight.pack.js"></script> <script>hljs.initHighlightingOnLoad();</script> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TFCP8WJ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!--Facebook--> <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> <!--Facebook--> <!--=== Top ===--> <div class="top"> <div class="container"> <ul class="loginbar pull-right"> <li> <img src="/images/feedback.png" height="15px" alt="feedback" /> <a href="https://www.cognitoforms.com/Fluentecosystem/FluentEcosystemSurvey"><b>Feedback</b></a> </li> <li class="devider"></li> <li class="socialbutton slack"><a href="https://launchpass.com/fluent-all"><img src="/images/slack_badge.png" width="55px" alt="slack" /></a></li> <li class="devider"></li> <li class="socialbutton github"> <iframe title="github" src="https://ghbtns.com/github-btn.html?user=fluent&repo=fluentd&type=watch&count=true" allowtransparency="true" scrolling="0" frameborder="0" height="25px" width="95px"> </iframe> </li> </ul> </div> </div><!--/top--> <!--=== End Top ===--> <!--=== Header ===--> <div class="header"> <div class="navbar navbar-default" role="navigation"> <div class="container"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"> <img style="margin-top:-20px" id="logo-header" srcset="/images/miscellany/fluentd-logo.png 1x, /images/miscellany/fluentd-logo_2x.png 2x" src="/images/miscellany/fluentd-logo.png" alt="Logo"> </a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse navbar-responsive-collapse"> <ul class="nav navbar-nav navbar-right"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false"> Overview <i class="icon-angle-down"></i> </a> <ul class="dropdown-menu"> <li><a href="/architecture">What is Fluentd?</a></li> <li><a href="/why">Why use Fluentd?</a></li> <li><a href="/testimonials">User Testimonials</a></li> <li><a href="/faqs">FAQs</a></li> <!-- <li><a href="/centralized_application_logging">Centralized App Logging</a></li> <li><a href="/gaming_application_logging">Gaming App Logging</a></li> <li><a href="/adtech_application_logging">Adtech App Logging</a></li> --> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false"> Plug-ins <i class="icon-angle-down"></i> </a> <ul class="dropdown-menu"> <li><a href="/datasources">List of Data Sources</a></li> <li><a href="/dataoutputs">List of Data Outputs</a></li> <li><a href="/plugins">List of All Plugins</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false"> Resources <i class="icon-angle-down"></i> </a> <ul class="dropdown-menu"> <li><a href="https://docs.fluentd.org/">Documentation (Fluentd)</a></li> <li><a href="http://fluentbit.io/documentation/current/">Documentation (Fluent Bit)</a></li> <li><a href="https://training.linuxfoundation.org/training/cloud-native-logging-with-fluentd-lfs242/">Online Training Course</a></li> <li><a href="/guides">Guides & Recipes</a></li> <li><a href="/videos">Videos</a></li> <li><a href="/slides">Slides</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="0" data-close-others="false"> Community <i class="icon-angle-down"></i> </a> <ul class="dropdown-menu"> <li><a href="/blog/">Blog</a></li> <li><a href="/newsletter">News Letter</a></li> <li><a href="https://www.cognitoforms.com/Fluentecosystem/FluentEcosystemSurvey">Feedback</a></li> <li><a href="https://store.cncf.io/collections/fluentd">Stickers / T-Shirts / Parkas</a></li> <li><a href="/contributing">Contributing</a></li> <li><a href="/community">Community List</a></li> <li><a href="/related-projects">Related Projects</a></li> </ul> </li> <li> <a href="/enterprise_services"> Enterprise </a> </li> <li> <a style="background-color:#0E83C8; color:#FFF" href="/download"> Download </a> </li> </ul> <div class="search-open"> <div class="input-group"> <form> <input type="text" class="form-control" placeholder="Search" id="st-search-input"> </form> <span class="input-group-btn"> <button class="btn-u" type="button">Go</button> </span> <!-- JS Global Compulsory --> <script src="/assets/application-6337697122cbccaa1069237ae24fe1e3d18dea244a15eb08170a4e33faf0f92a.js" type="text/javascript"></script> </div><!-- /input-group --> </div> </div><!-- /navbar-collapse --> </div> </div> </div><!--/header--> <!--=== End Header ===--> <!--=== Breadcrumbs ===--> <div class="breadcrumbs margin-bottom-40"> <div class="container"> <h1 class="pull-left"><a href="/blog/">Fluentd Blog</a></h1> <ul class="pull-right breadcrumb"> <li><a href="/">Home</a></li> <li class="active">Fluentd Blog</li> </ul> </div><!--/container--> </div><!--/breadcrumbs--> <!--=== End Breadcrumbs ===--> <!--=== Content Part ===--> <div class="container"> <div class="row blog-page"> <!-- Left Sidebar --> <div class="col-md-8"> <!--Blog Post--> <div class="blog margin-bottom-40"> <h2><a href="/blog/fluentd-drop-alpine-docker-image"> Drop Alpine and switch default to Debian for Fluentd docker image</a></h2> <div class="blog-post-tags"> <ul class="list-unstyled list-inline blog-info"> <li><i class="icon-calendar"></i>2025-03-14</li> <li><i class="icon-pencil"></i>ClearCode, Inc.</li> </ul> <ul class="list-unstyled list-inline blog-tags"> <li> <i class="icon-tags"></i> <a href="/blog/tag/fluentd">fluentd</a> <a href="/blog/tag/fluent-package">fluent-package</a> <a href="/blog/tag/announcement">announcement</a> </li> </ul> </div> <p><p>Hi users!</p> <p>We have planned to change what docker image provides.</p> <p>Currently, we ship Fluentd docker image for Alpine and Debian (armhf, arm64, amd64). But, Alpine image in Fluentd was already marked as deprecated, so we will make things forward.</p> <p>In the near future, we will drop Alpine image. This decision affects existing Alpine image users.</p> <h2>Notice about existing Alpine image users</h2> <ul> <li><code>fluent/fluentd:edge</code> will be changed from Alpine to Debian image <ul> <li>This is a notable incompatible change!</li> </ul></li> <li>v1.19 (not released yet) <ul> <li>No more releases for Alpine images</li> <li>Then short tag also changed to Debian images (e.g. v1.19.0-1.0, v1.19-1 should be Debian instead of Alpine)</li> </ul></li> <li>v1.18 Alpine image will not be supported after v1.19 is released (T.B.D.), so recommend to migrate it!</li> <li>v1.16 Alpine image will be supported until Dec 2025, so there is room to migrate gradually.</li> </ul> <p>If you still want to use Alpine, keep v1.16 series or v1.18 series. (not recommended though)</p> <h2>Why not provide Alpine anymore?</h2> <p>It was well known that Alpine has possibility of incompatibility and performance issues in contrast to Debian images. It was a historical reason to provide Alpine images - "In the previous versions, we provided them", so there is no positive reason to continue it.</p> <h2>Provide shorter tags to follow internal version bump</h2> <p>Not only just dropping Alpine image, we will improve tagging rules:</p> <ul> <li>Add version-specific tag which will not be affected by internal version bump</li> </ul> <p>In previous versions, there was no version-specific tag which would follow internal version bump. For example, if you want to stick to Fluentd v1.18.0, you can select v1.18.0-1.0, but if internal version was bumped to v1.18.0-1.1 or something, need to update it. There is <code>edge-debian</code> tag, but it does not stick to a specific Fluentd version because it will automatically update when the next major/minor version is released.</p> <p>For such a purpose, shorter v1.19 or v1.19.x tag will be available in the future release.</p> <p>Happy logging!</p> </p> <p><a class="btn-u btn-u-small" href="/blog/fluentd-drop-alpine-docker-image"><i class="icon-plus-sign"></i> Read More</a></p> </div> <div class="blog margin-bottom-40"> <h2><a href="/blog/fluent-package-v5.0.6-has-been-released"> fluent-package v5.0.6 has been released</a></h2> <div class="blog-post-tags"> <ul class="list-unstyled list-inline blog-info"> <li><i class="icon-calendar"></i>2025-02-14</li> <li><i class="icon-pencil"></i>ClearCode, Inc.</li> </ul> <ul class="list-unstyled list-inline blog-tags"> <li> <i class="icon-tags"></i> <a href="/blog/tag/fluentd">fluentd</a> <a href="/blog/tag/fluent-package">fluent-package</a> <a href="/blog/tag/announcement">announcement</a> </li> </ul> </div> <p><p>Hi users!</p> <p>We have released fluent-package <a href="https://github.com/fluent/fluent-package-builder/releases/tag/v5.0.6">v5.0.6</a>. fluent-package is a stable distribution package of Fluentd. (successor of td-agent v4)</p> <p>This is a maintenance release of v5.0.x LTS series. Bundled Fluentd was updated to 1.16.7.</p> <p>We recommend upgrading to fluent-package v5.0.6!</p> <h2>Changes from fluent-package v5.0.5</h2> <p>In this release, known Windows issues were fixed.</p> <ul> <li>Update bundled Fluentd to v1.16.7</li> <li>Update bundled gems overall</li> <li>msi: Fixed to keep some registry values with update</li> </ul> <h2>msi: Fixed to keep some registry values with update</h2> <p>In the previous versions, there had been a known issue that fluent-package could not keep some registry values when upgrading.</p> <p>Thus, if you modify Fluentd service (<code>fluentdwinsvc</code>) related registry, you need to restore your configuration after upgrading.</p> <p>Since v5.0.6, fluent-package was fixed to keep some registry values during upgrading package.</p> <p>Here is the target registry which will be kept during upgrading fluent-package:</p> <ul> <li><code>Start</code></li> <li><code>DelayedAutostart</code></li> <li><code>fluentdopt</code> (logging path might be modified by users)</li> </ul> <p>In most cases, fluent-package user might want to keep <code>fluentdopt</code> because it stores additional command line option parameters.</p> <p>In this release, bundled Fluentd v1.16.7 also contains the fixes for Windows.</p> <ul> <li>Windows: Fix <code>NoMethodError</code> of --daemon option</li> <li>Windows: Fixed the issues which are related to start/stop Fluentd service</li> </ul> <p>See <a href="fluentd-v1.16.7-has-been-released">Fluentd v1.16.7 has been released</a> blog article in details.</p> <h2>Download</h2> <p>Please see <a href="/download/fluent_package">the download page</a>.</p> <h3>About next LTS schedule</h3> <p>We plan to ship the next LTS version of fluent-package v5.0.7 on June, 2025. The content of updates are still in T.B.D.</p> <h3>End of support for td-agent v4, let's migrate to fluent-package</h3> <p>As it was already announced <a href="schedule-for-td-agent-4-eol">Drop schedule announcement about EOL of Treasure Agent (td-agent) 4</a>, td-agent v4 reached EOL in Dec, 2023.</p> <p>After reached EOL, td-agent v4.5.3 on Windows was released because there was a crash bug during startup on Windows. It was backported fix from fluent-package v5 as it is critical in some case. Even though this was a exceptional maintenance release, but there is no change to the fact that we already stopped maintaining td-agent v4.</p> <p>We strongly recommend migrating from td-agent v4 to fluent-package v5 (LTS). See <a href="upgrade-td-agent-v4-to-v5">Upgrade to fluent-package v5</a></p> </p> <p><a class="btn-u btn-u-small" href="/blog/fluent-package-v5.0.6-has-been-released"><i class="icon-plus-sign"></i> Read More</a></p> </div> <div class="blog margin-bottom-40"> <h2><a href="/blog/fluentd-v1.16.7-has-been-released"> Fluentd v1.16.7 has been released</a></h2> <div class="blog-post-tags"> <ul class="list-unstyled list-inline blog-info"> <li><i class="icon-calendar"></i>2025-01-29</li> <li><i class="icon-pencil"></i>ClearCode, Inc.</li> </ul> <ul class="list-unstyled list-inline blog-tags"> <li> <i class="icon-tags"></i> <a href="/blog/tag/fluentd">fluentd</a> <a href="/blog/tag/announcement">announcement</a> </li> </ul> </div> <p><p>Hi users!</p> <p>We have released v1.16.7 on 2025-01-29. ChangeLog is <a href="https://github.com/fluent/fluentd/blob/v1.16/CHANGELOG.md#release-v1167---20250129">here</a>.</p> <p>This release is a maintenance release of v1.16 series. In this release, some bugs which are related on Windows were fixed with backporting from v1.18.x.</p> <p>This release will be bundled for upcoming <code>fluent-package</code> LTS version v5.0.6!</p> <h2>Bug Fixes</h2> <h3>Windows: Fix NoMethodError of --daemon option</h3> <p>In this release, we have fixed a bug that it will fail when <code>--daemon</code> option is used on Windows.</p> <p>It was a regression bug since v1.16.0 on Windows, but usually running as a service is recommended way on Windows, so most of Fluentd users were not affected.</p> <h3>Windows: Fixed the issues which are related to start/stop Fluentd service</h3> <p>In this release, we have fixed the following bugs which are related to start/stop the Fluentd service.</p> <ul> <li>Fixed an issue when stopping the service immediately after startup could leave the processes</li> <li>Fixed an issue where stopping service sometimes can not be completed forever</li> </ul> <p>These bug were caused because stop event was not handled correctly in the previous releases.</p> <p>Typically, this bug will happen if you stop the Fluentd service immediately after startup. Then it could leave the processes or stopping service sometimes can not be completed forever.</p> <h2>Misc news</h2> <p>We also enforcing stabilizing CI of Fluentd. It has nothing to do with Fluentd's functionality directly, but it is very important to provide stable version of Fluentd continuously.</p> <p>Not only <a href="https://github.com/fluent/fluentd/pull/4747">Windows: Add workaround for unexpected exception #4747</a>, many CI improvements was merged into master, then backported to v1.16 branch, too.</p> <p>Enjoy logging!</p> </p> <p><a class="btn-u btn-u-small" href="/blog/fluentd-v1.16.7-has-been-released"><i class="icon-plus-sign"></i> Read More</a></p> </div> <div class="blog margin-bottom-40"> <h2><a href="/blog/fluent-package-v5.2.0-has-been-released"> fluent-package v5.2.0 has been released</a></h2> <div class="blog-post-tags"> <ul class="list-unstyled list-inline blog-info"> <li><i class="icon-calendar"></i>2024-12-14</li> <li><i class="icon-pencil"></i>ClearCode, Inc.</li> </ul> <ul class="list-unstyled list-inline blog-tags"> <li> <i class="icon-tags"></i> <a href="/blog/tag/fluentd">fluentd</a> <a href="/blog/tag/fluent-package">fluent-package</a> <a href="/blog/tag/announcement">announcement</a> </li> </ul> </div> <p><p>Hi users!</p> <p>We have released fluent-package <a href="https://github.com/fluent/fluent-package-builder/releases/tag/v5.2.0">v5.2.0</a>. fluent-package is a stable distribution package of Fluentd. (successor of td-agent v4)</p> <p>This release is a new release of v5.2 series.</p> <h2>Changes from fluent-package v5.1.0</h2> <ul> <li>Support upgrade fluentd service with zero-downtime</li> <li>Update ruby to 3.2.6</li> <li>Update bundled Fluentd to v1.18.0</li> <li>Update bundled gems overall</li> <li>Solved possibility of DoS through "NoMemoryError"</li> <li>msi: set <code>GEM_HOME</code>/<code>GEM_PATH</code> in fluentd.bat</li> <li>deb: suppress service restart by needrestart</li> <li>Fixed SIGABORT error with fluent-plugin-systemd</li> </ul> <h2>Support upgrade fluentd service with zero-downtime</h2> <p>Previously, when upgrading the fluent-package, you had to stop the fluentd service, install the new version of the fluent-package, then install any necessary plugins, and finally restart the fluentd service.</p> <p>Starting from fluent-package v5.2.0, we have introduced the zero-downtime restart feature that automatically installs the required plugins during the upgrade process and allows you to upgrade Fluentd without interrupting the logging service.</p> <p>Please refer to "Advisory for upgrading with zero-downtime".</p> <h2>Solved possibility of DoS through "NoMemoryError"</h2> <p>In the previous versions of msgpack gem, there was a possibility that cause DoS (Denial Of Service) when crafted message was sent to Fluentd.</p> <p>When that message was sent, it might cause "NoMemoryError" on Fluentd because there is a case that msgpack try to pre-allocate huge amount of memories.</p> <p>Above behavior was fixed not to pre-allocate over 32k entries (limit pre-allocated amount of memories) in msgpack 1.7.3 and bundled.</p> <h2>msi: set <code>GEM_HOME</code>/<code>GEM_PATH</code> in fluentd.bat</h2> <p>In the previous versions, fluentd.bat doesn't set GEM<em>HOME/GEM</em>PATH explicitly.</p> <p>If users set custom <code>GEM_HOME</code> / <code>GEM_PATH</code> environment variables, the batch file will not work as expected. Therefore, this patch will set the appropriate values in the batch file.</p> <h2>deb: suppress service restart by needrestart</h2> <p>We have changed so that Fluentd does not restart when the needrestart package is installed. fluent-package v5.2.0 places <code>/etc/needrestart/conf.d/50-fluent-package.conf</code>.</p> <h2>Fixed SIGABORT error with fluent-plugin-systemd</h2> <p>In this release, the bundled fluent-plugin-systemd was updated to 1.1.0. That release fixed SIGABORT error with inconsistency of memory allocator handling.</p> <h2>Advisory for upgrading with zero-downtime</h2> <p>The zero-downtime restart feature can be configured by <code>FLUENT_PACKAGE_SERVICE_RESTART</code> environment variable. Please refer to following section for more details.</p> <ul> <li>Add <code>FLUENT_PACKAGE_SERVICE_RESTART</code> environmental variable <ul> <li>This section explains <code>FLUENT_PACKAGE_SERVICE_RESTART</code> environment variable.</li> </ul></li> <li>Automate Plugin Install for Update on Demand <ul> <li>This section explains the mechanism that installs the plugins automatically during the upgrade process.</li> </ul></li> </ul> <h3>Add <code>FLUENT_PACKAGE_SERVICE_RESTART</code> environmental variable</h3> <p>We have introduced <code>FLUENT_PACKAGE_SERVICE_RESTART</code> environment variable to configure the zero-downtime restart feature. The variable exists in the following file:</p> <ul> <li>RPM: <code>/etc/sysconfig/fluentd</code></li> <li>DEB: <code>/etc/default/fluentd</code></li> </ul> <p>Example:</p> <pre><code>FLUENT_PACKAGE_OPTIONS="" # Control method to upgrade service (auto/manual) restart FLUENT_PACKAGE_SERVICE_RESTART=auto </code></pre> <h4><strong>auto (default)</strong></h4> <p>The service automatically restarts with zero-downtime restart feature when all of the following conditions are met:</p> <ol> <li>The service was active before updating.</li> <li>The installed and upgrading versions are required 5.2.0 or higher (both sides must support this feature).</li> </ol> <p>The plugins will be automatically reinstalled if needed if your environment has an active online connection. For more details, please refer to "Automate Plugin Install for Update on Demand".</p> <h4><strong>manual</strong></h4> <p>You can use this approach if you prefer to manage plugins manually or if your environment does not have offline connection. If the service was active before the update, it will not restart automatically with this configuration. You need to restart the service manually.</p> <ul> <li>The zero-downtime restart: <ul> <li>Send a <code>SIGUSR2</code> signal to the supervisor process, such as with <code>kill -USR2 <PID></code></li> </ul></li> <li>Normal restart: <ul> <li>Restart the service normally, such as with <code>systemctl restart fluentd</code>.</li> </ul></li> </ul> <h3>Automate Plugin Install for Update on Demand</h3> <h4>Automate Plugin Management</h4> <p>If you prefer to manage plugins automatically, please set <code>FLUENT_PACKAGE_SERVICE_RESTART</code> to <code>auto</code> (default).</p> <p>When the service restarts automatically using the zero-downtime restart feature, any missing plugins are automatically detected and reinstalled before the restart.</p> <p>Previously, automatic restarts after updates were not recommended due to potential issues. If you manually install plugins, you need to reinstall them before restarting when the embedded Ruby version is updated.</p> <p>To address this, this feature enables automatic plugin installation during the restart process. The steps are as follows:</p> <ol> <li>Collect the current list of plugins before the update. <ul> <li>Recognize gems as plugins that has <code>fluent-plugin-</code> prefix.</li> </ul></li> <li>After installing the updated package, detect missing plugins. <ul> <li>Compare the collected plugin list with the default plugins to identify any missing ones.</li> </ul></li> <li>Install the missing plugins.</li> </ol> <h4>Manual Plugin Management</h4> <p>If you prefer to manage plugins manually, please set <code>FLUENT_PACKAGE_SERVICE_RESTART</code> to <code>manual</code>. This is useful in cases such as:</p> <ul> <li>Pinning specific plugin versions</li> <li>Operating in an offline environment</li> </ul> <p>In this mode, automatic plugin installation and restarts are disabled. You can manually install plugins and send a <code>SIGUSR2</code> signal to trigger the zero-downtime restart feature after the update.</p> <h3>Caution: if you use a custom unit file, need to migrate it to use this feature safely</h3> <p>If you use a custom unit file, such as <code>/etc/systemd/system/fluentd.service</code>, please remove these 2 lines.</p> <pre><code>Environment=GEM_HOME=/opt/fluentd/lib/ruby/gems/... Environment=GEM_PATH=/opt/fluentd/lib/ruby/gems/... </code></pre> <p>We don't need <code>GEM_HOME</code> and <code>GEM_PATH</code>. They will be removed after v5.2.0, but if you use a custom unit file, you need to remove them manually. If these variables are set, the zero-downtime restart feature may not work correctly. It is because the new process inherits the original environment variables if using this feature.</p> <p>Please refer to <a href="https://github.com/fluent/fluent-package-builder/pull/713">#713</a> for more details.</p> <h2>Download</h2> <p>Please see <a href="/download/fluent_package">the download page</a>.</p> <h3>About next LTS schedule</h3> <p>We plan to ship the next LTS version of fluent-package v5.0.6 on March, 2025. The content of updates are still in T.B.D.</p> <h3>End of support for td-agent v4, let's migrate to fluent-package</h3> <p>As it was already announced <a href="schedule-for-td-agent-4-eol">Drop schedule announcement about EOL of Treasure Agent (td-agent) 4</a>, td-agent v4 was reached EOL in Dec, 2023.</p> <p>After reached EOL, td-agent v4.5.3 on Windows was released because there was a crash bug during startup on Windows. It was backported fix from fluent-package v5 as it is critical in some case. Even though this was a exceptional maintenance release, but there is no change to the fact that we already stopped maintaining td-agent v4.</p> <p>We strongly recommend migrating from td-agent v4 to fluent-package v5 (LTS). See <a href="upgrade-td-agent-v4-to-v5">Upgrade to fluent-package v5</a></p> </p> <p><a class="btn-u btn-u-small" href="/blog/fluent-package-v5.2.0-has-been-released"><i class="icon-plus-sign"></i> Read More</a></p> </div> <div class="blog margin-bottom-40"> <h2><a href="/blog/fluentd-v1.18.0-has-been-released"> Fluentd v1.18.0 has been released</a></h2> <div class="blog-post-tags"> <ul class="list-unstyled list-inline blog-info"> <li><i class="icon-calendar"></i>2024-11-29</li> <li><i class="icon-pencil"></i>ClearCode, Inc.</li> </ul> <ul class="list-unstyled list-inline blog-tags"> <li> <i class="icon-tags"></i> <a href="/blog/tag/fluentd">fluentd</a> <a href="/blog/tag/announcement">announcement</a> </li> </ul> </div> <p><p>Hi users!</p> <p>We have released v1.18.0 on 2024-11-29. ChangeLog is <a href="https://github.com/fluent/fluentd/blob/master/CHANGELOG.md#release-v1180---20241129">here</a>.</p> <p>This release is a new release of v1.18 series. In this release, we added zero-downtime-restart as a key feature, enhanced some features and fixed bugs.</p> <h2>Enhancement</h2> <h3>Add zero-downtime-restart feature</h3> <p>In this release, we have added the feature to update the Fluentd process with zero downtime for Linux and macOS environments (not supported on Windows). You can use this feature to reload config and restart Fluentd gracefully.</p> <p>You can use this feature by sending a <code>SIGUSR2</code> signal to the supervisor process, and this changes behavior <code>SIGUSR2</code> from graceful reload to zero-downtime-restart feature on Linux and macOS environments.</p> <p>You can still use the conventional graceful reloading feature by directly sending <code>SIGUSR2</code> to each worker process or using the RPC feature. However, it had some limitations and issues (Please see <a href="https://github.com/fluent/fluentd/pull/4624">#4624</a> for details). So, we recommend using this new feature for graceful reloading/restarting unless there is a particular reason.</p> <p>Please see <a href="https://github.com/fluent/fluentd/pull/4624">#4624</a> for more information.</p> <h3>Add with-source-only feature</h3> <p>This feature has been added to support the zero-downtime-restart feature that it launches Fluentd with input plugins only.</p> <p>This feature has added <code>--with-source-only</code> option in <code>fluentd</code> command, <code>with_source_only</code> option in system configuration and <code>out_buffer</code> plugin which can be used for buffering and relabeling events. These are used internally to support zero-downtime-restart.</p> <p>Please see <a href="https://github.com/fluent/fluentd/pull/4661">#4661</a> for more information.</p> <h3>Config File Syntax: Extend Embedded Ruby Code support for Hashes and Arrays</h3> <p>The <a href="https://docs.fluentd.org/configuration/config-file#embedded-ruby-code">Embedded Ruby Code</a> has been supported in configuration. In this release, we have extended the syntax to allow the use of Embedded Ruby Code in Hashes and Arrays.</p> <p>Example:</p> <pre><code>key1 ["foo","#{1 + 1}"] # Embedded Ruby Code in Array syntax key2 {"foo":"#{1 + 1}"} # Embedded Ruby Code in Hash syntax </code></pre> <p>Result:</p> <pre><code>key1 ["foo","2"] key2 {"foo":"2"} </code></pre> <p>Please note that this is not backward compatible, although we assume that this will never affect to actual existing configs.</p> <p>In case the behavior changes unintentionally, you can disable this feature by surrounding the entire value with single quotes.</p> <p>Example:</p> <pre><code>key '{"foo":"#{1 + 1}"}' </code></pre> <h3>transport tls: Use <code>SSL_VERIFY_NONE</code> by default</h3> <p>We have changed the flags to <code>SSL_VERIFY_NONE</code> by default for server the certification verification.</p> <p>In the previous versions, it had been necessary to set <code>client_cert_auth false</code> and <code>insecure true</code> to apply SSL<em>VERIFY</em>NONE. This was an inappropriate combination of settings. In this release, it can make it possible to apply <code>SSL_VERIFY_NONE</code> with just <code>client_cert_auth false</code> (default).</p> <h3>transport tls: Add <code>ensure_fips</code> option to ensure FIPS compliant mode</h3> <p>We have added <code>ensure_fips</code> option in <code>transport</code> section in config to check FIPS mode. When it configures <code>ensure_fips true</code>, it will check FIPS mode is supported in your environment, if not, just aborts. By default, it has disabled.</p> <p>Example:</p> <pre><code><transport tls> ensure_fips true </transport> </code></pre> <p>Please see <a href="https://docs.fluentd.org/configuration/transport-section#tls-setting">the document</a> for more information.</p> <h3>plugin_helper/server: Add <code>receive_buffer_size</code> parameter in transport section</h3> <p>In the previous versions, the <code>receive_buffer_size</code> option can be set by <code>in_udp</code> only. In this release, we have added the <code>receive_buffer_size</code> option into <code>transport</code> section too to configure the buffer size on <code>in_tcp</code> or <code>in_syslog</code> plugins.</p> <p>Example:</p> <pre><code><transport udp> receive_buffer_size 4194304 </transport> </code></pre> <h3>filter_parser: Now able to handle multiple parsed results</h3> <p>In the previous versions, there was a restriction that only the first record could be handled when the parsed result was multiple records. In this release, we have removed this limitation to handle multiple records appropriately.</p> <p>You can read more about this limitation in the <a href="https://www.fluentd.org/blog/fluentd-v1.17.0-has-been-released">Remaining problem: filter_parser</a> in Fluentd v1.17.0 release blog.</p> <h3>in_http: add <code>add_tag_prefix</code> option</h3> <p>We have added <code>add_tag_prefix</code> option in <code>in_http</code> plugin to add the prefix to the incoming event's tag, similar to <code>in_forward</code> plugin.</p> <p>Example:</p> <pre><code><source> @type http add_tag_prefix prod </source> </code></pre> <h3>System configuration: add path option in log section</h3> <p>We have added <code>path</code> option to <code>log</code> section of system configuration.</p> <p>Example:</p> <pre><code><system> <log> path /path/to/log_file </log> </system> </code></pre> <h2>Bug Fix</h2> <h3>command: fix NoMethodError of --daemon under Windows</h3> <p>We have fixed a NoMethodError when launches <code>fluentd</code> with <code>--daemon</code> command line option under Windows platform.</p> <h3>fluentd command: fix --plugin (-p) option not to overwrite default value</h3> <p>We have fixed <code>--plugin</code> command line option that it does not overwrite the default value.</p> <p>Enjoy logging!</p> </p> <p><a class="btn-u btn-u-small" href="/blog/fluentd-v1.18.0-has-been-released"><i class="icon-plus-sign"></i> Read More</a></p> </div> <!--End Blog Post--> <!--Pagination--> <!-- <div class="text-center"> <ul class="pagination"> <li><a href="#">芦</a></li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li class="active"><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">6</a></li> <li><a href="#">7</a></li> <li><a href="#">8</a></li> <li><a href="#">禄</a></li> </ul> </div> --> <!--End Pagination--> </div> <!-- End Left Sidebar --> <!-- Right Sidebar --> <div class="col-md-4 magazine-page"> <!-- Tabs Widget --> <div class="headline headline-md"><h2>About Fluentd</h2></div> <div class="margin-bottom-20"> <p><a href="/">Fluentd</a> is an open source data collector to simplify log management.</p> </div> <!-- End Tabs Widget --> <!-- Search Bar --> <!-- <div class="headline headline-md"><h2>Search</h2></div> <div class="input-group margin-bottom-40"> <input type="text" class="form-control" placeholder="Search"> <span class="input-group-btn"> <button class="btn-u" type="button">Go</button> </span> </div> --> <!-- End Search Bar --> <!-- Topics --> <div class="posts margin-bottom-20"> <div class="headline headline-md"><h2>Announcement Topics</h2></div> <p>2024-08-29: <a href="/blog/fluent-package-v6-scheduled-lifecycle"> Scheduled support lifecycle announcement about Fluent Package v6</a></p> <p>2023-08-29: <a href="/blog/schedule-for-td-agent-4-eol"> Drop schedule announcement about EOL of Treasure Agent (td-agent) 4</a></p> <p>2023-08-29: <a href="/blog/fluent-package-scheduled-lifecycle"> Scheduled support lifecycle announcement about Fluent Package</a></p> <p>2023-07-31: <a href="/blog/upgrade-td-agent-v4-to-v5"> Upgrade to fluent-package v5</a></p> </div> <!-- End Topics --> <!-- Posts --> <div class="posts margin-bottom-20"> <div class="headline headline-md"><h2>Recent Posts</h2></div> <p>2025-03-14: <a href="/blog/fluentd-drop-alpine-docker-image"> Drop Alpine and switch default to Debian for Fluentd docker image</a></p> <p>2025-02-14: <a href="/blog/fluent-package-v5.0.6-has-been-released"> fluent-package v5.0.6 has been released</a></p> <p>2025-01-29: <a href="/blog/fluentd-v1.16.7-has-been-released"> Fluentd v1.16.7 has been released</a></p> <p>2024-12-14: <a href="/blog/fluent-package-v5.2.0-has-been-released"> fluent-package v5.2.0 has been released</a></p> <p>2024-11-29: <a href="/blog/fluentd-v1.18.0-has-been-released"> Fluentd v1.18.0 has been released</a></p> <p>2024-11-08: <a href="/blog/fluent-package-v5.0.5-has-been-released"> fluent-package v5.0.5 has been released</a></p> <p>2024-08-29: <a href="/blog/fluent-package-v6-scheduled-lifecycle"> Scheduled support lifecycle announcement about Fluent Package v6</a></p> <p>2024-08-20: <a href="/blog/fluentd-v1.16.6-has-been-released"> Fluentd v1.16.6 has been released</a></p> <p>2024-08-19: <a href="/blog/fluentd-v1.17.1-has-been-released"> Fluentd v1.17.1 has been released</a></p> <p>2024-08-02: <a href="/blog/fluent-package-v5.1.0-has-been-released"> fluent-package v5.1.0 has been released</a></p> </div> <!-- End Posts --> <!-- Blog Tags --> <!-- <div class="headline headline-md"><h2>Blog Tags</h2></div> <ul class="list-unstyled blog-tags margin-bottom-30"> <li><a href="#"><i class="icon-tags"></i> Business</a></li> <li><a href="#"><i class="icon-tags"></i> Music</a></li> <li><a href="#"><i class="icon-tags"></i> Internet</a></li> <li><a href="#"><i class="icon-tags"></i> Money</a></li> <li><a href="#"><i class="icon-tags"></i> Google</a></li> <li><a href="#"><i class="icon-tags"></i> TV Shows</a></li> <li><a href="#"><i class="icon-tags"></i> Education</a></li> <li><a href="#"><i class="icon-tags"></i> People</a></li> <li><a href="#"><i class="icon-tags"></i> People</a></li> <li><a href="#"><i class="icon-tags"></i> Math</a></li> <li><a href="#"><i class="icon-tags"></i> Photos</a></li> <li><a href="#"><i class="icon-tags"></i> Electronics</a></li> <li><a href="#"><i class="icon-tags"></i> Apple</a></li> <li><a href="#"><i class="icon-tags"></i> Canada</a></li> </ul> --> <!-- End Blog Tags --> <div class="margin-bottom-30"> <div class="headline"><h2>Learn</h2></div> <p>Want to learn the basics of Fluentd? Check out these pages.</p> <ul class="list-unstyled"> <li><i class="icon-arrow-right color-green"></i><a href="/architecture">What is Fluentd?</a></li> <li><i class="icon-arrow-right color-green"></i><a href="/why">Why use Fluentd?</a></li> <li><i class="icon-arrow-right color-green"></i><a href="/testimonials">Who is using Fluentd?</a></li> <li><i class="icon-arrow-right color-green"></i><a href="/blog/unified-logging-layer">What is Unified Logging Layer?</a></li> <li><i class="icon-arrow-right color-green"></i><a href="/faqs">FAQs</a></li> </ul> </div> <div class="margin-bottom-30"> <div class="headline"><h2>Ask the Community</h2></div> <p>Couldn't find enough information? Let's ask the community!</p> <ul class="list-unstyled"> <li><i class="icon-ok color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://github.com/fluent/fluentd/discussions">Forum</a></li> <li><i class="icon-ok color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://groups.google.com/forum/#!forum/fluentd">Google Group</a></li> <li><i class="icon-ok color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="/newsletter">News Letter</a></li> <li><i class="icon-stackexchange color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="http://stackoverflow.com/questions/tagged/fluentd">Stack Overflow</a></li> <li><i class="icon-github-alt color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://github.com/fluent/fluentd/issues">Issue Tracker</a></li> <li><i class="icon-twitter color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://twitter.com/fluentd">Twitter</a></li> <li><i class="icon-facebook color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://www.facebook.com/pages/Fluentd/196064987183037">Facebook</a></li> <li><i class="icon-github color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="http://github.com/fluent/fluentd">Source Code</a></li> </ul> </div> <div class="margin-bottom-30"> <div class="headline"><h2>Ask the Experts</h2></div> <p>You need commercial-grade support from Fluentd committers and experts?</p> <ul class="list-unstyled"> <li><i class="icon-ok color-green"></i><a href="/enterprise_services">Enterprise Services</a></li> <li><i class="icon-ok color-green"></i><a href="https://www.cognitoforms.com/Fluentecosystem/FluentEcosystemSurvey">Ecosystem Survey/Interview</a></li> </ul> </div> <!-- Socials --> <div class="headline headline-md"><h2>Follow Us!</h2></div> <div class="margin-bottom-40"> <div> <ul class="social-icons"> <li><a href="https://twitter.com/fluentd" aria-label="twitter" data-original-title="Twitter" class="social_twitter"></a></li> <li><a href="https://www.facebook.com/pages/Fluentd/196064987183037" aria-label="facebook" data-original-title="Facebook" class="social_facebook"></a></li> <li><a href="http://vimeo.com/tag:fluentd" aria-label="vimeo" data-original-title="Vimeo" class="social_vimeo"></a></li> <li><a href="/blog/feed.rss" aria-label="blog" data-original-title="Blog RSS" class="social_rss"></a></li> </ul> </div> </div><br/> </div> <!-- End Right Sidebar --> </div><!--/row--> </div><!--/container--> <!--=== End Content Part ===--> <!--=== Footer ===--> <div class="footer"> <div class="container"> <div class="row"> <div class="col-md-4 md-margin-bottom-40"> <!-- About --> <div class="headline"><h2>About</h2></div> <p class="margin-bottom-25 md-margin-bottom-40"><a href="https://www.fluentd.org/">Fluentd</a> is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data.</p> <!-- Monthly Newsletter --> <div class="headline"><h2>Monthly Newsletter</h2></div> <p class="margin-bottom-25"><a href="/newsletter">Subscribe to our newsletter and stay up to date!</a></p> <!-- Community --> <div class="headline"><h2>Community</h2></div> <p>Fluentd is a <a href="https://cncf.io/">Cloud Native Computing Foundation (CNCF)</a> graduated project. All components are available under the Apache 2 License.</p> </div><!--/col-md-4--> <div class="col-md-4 md-margin-bottom-40"> <div class="posts"> <div class="headline"><h2>Recent Tweets</h2></div> <a class="twitter-timeline" data-lang="en" data-width="100%" data-height="300" data-theme="dark" data-chrome="transparent noheader nofooter noborders" data-link-color="#2ad4e8" href="https://twitter.com/fluentd?ref_src=twsrc%5Etfw">Tweets by fluentd</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </div> </div><!--/col-md-4--> <div class="col-md-4"> <!-- Community --> <div class="margin-bottom-20"> <div class="headline"><h2>Community</h2></div> <ul class="list-unstyled"> <li><i class="icon-ok color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://github.com/fluent/fluentd/discussions">Forum</a></li> <li><i class="icon-ok color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://groups.google.com/forum/#!forum/fluentd">Google Group</a></li> <li><i class="icon-stackexchange color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://stackoverflow.com/questions/tagged/fluentd">Stack Overflow</a></li> <li><i class="icon-github-alt color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://github.com/fluent/fluentd/issues">Issue Tracker</a></li> <li><i class="icon-twitter color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://twitter.com/fluentd">Twitter</a></li> <li><i class="icon-facebook color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://www.facebook.com/pages/Fluentd/196064987183037">Facebook</a></li> <li><i class="icon-github color-green"></i><a rel="nofollow noopener noreferrer" target="_blank" href="https://github.com/fluent/fluentd">Source Code</a></li> </ul> </div> <!-- Stay Connected --> <div> <div class="headline"><h2>Stay Connected</h2></div> <ul class="social-icons"> <li><a href="https://www.facebook.com/pages/Fluentd/196064987183037" data-original-title="Facebook" class="social_facebook" aria-label="Facebook"></a></li> <li><a href="https://twitter.com/fluentd" data-original-title="Twitter" class="social_twitter" aria-label="Twitter"></a></li> <li><a href="https://vimeo.com/tag:fluentd" data-original-title="Vimeo" class="social_vimeo" aria-label="Vimeo"></a></li> <li><a href="/blog/feed.rss" data-original-title="Blog" class="social_rss" aria-label="Blog"></a></li> </ul> </div> </div><!--/col-md-4--> </div><!--/row--> </div><!--/container--> </div><!--/footer--> <!--=== End Footer ===--> <!--=== Copyright ===--> <div class="copyright"> <div class="container"> <div class="row"> <div class="col-md-12"> <p class="copyright-space"> ©2010-2025 Fluentd Project. ALL Rights Reserved.<br/> Fluentd is a hosted project under the <a href="https://cncf.io/">Cloud Native Computing Foundation (CNCF)</a>. All components are available under the Apache 2 License. </p> </div> </div><!--/row--> </div><!--/container--> </div><!--/copyright--> <!--=== End Copyright ===--> <script type="text/javascript"> jQuery(document).ready(function() { App.init(); App.initSliders(); Index.initParallaxSlider(); }); </script> <!--[if lt IE 9]> <script src="/assets/respond-81fb9e7a70c0940db38c1c7baf658a7ed589efd91defa648aeee277847ec2175.js" type="text/javascript"></script> <![endif]--> </body> </html>