CINXE.COM
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:site" content="@appsignal" data-next-head=""/><meta name="twitter:creator" content="@AppSignal" data-next-head=""/><meta href="//d201zbfblqcbtj.cloudfront.net" rel="dns-prefetch" data-next-head=""/><meta content="7 days" name="revisit-after" data-next-head=""/><title data-next-head="">Changelog | AppSignal APM</title><meta name="robots" content="index,follow" data-next-head=""/><meta name="description" content="Every day, we work on making AppSignal a bit better. Here's the latest and greatest." data-next-head=""/><meta property="og:title" content="Changelog" data-next-head=""/><meta property="og:description" content="Every day, we work on making AppSignal a bit better. Here's the latest and greatest." data-next-head=""/><meta property="og:url" content="https://www.appsignal.com/changelog" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:image" content="https://blog.appsignal.com/api/og?title=Changelog" data-next-head=""/><meta property="og:image:alt" content="Changelog" data-next-head=""/><meta property="og:image:type" content="image/jpeg" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="628" data-next-head=""/><meta property="og:locale" content="en" data-next-head=""/><meta property="og:site_name" content="AppSignal" data-next-head=""/><link rel="canonical" href="https://www.appsignal.com/changelog" data-next-head=""/><link rel="icon" href="/assets/favicon/favicon.svg" type="image/svg+xml"/><link rel="mask-icon" href="/assets/favicon/favicon.svg" color="#29A575"/><link rel="apple-touch-icon" href="/assets/favicon/apple-touch-icon.png"/><link rel="manifest" href="/assets/favicon/manifest.webmanifest"/><link rel="preload" href="/fonts/rubik-v12-latin-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><link rel="preload" href="/fonts/rubik-v12-latin-500.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><meta name="ahrefs-site-verification" content="eaeabe5fcccf5783b1b0c574c52a3306af55ea1ab27e5eed6405393ed63feae6"/><link rel="preload" href="/_next/static/css/f70c1c9257986c7c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/f70c1c9257986c7c.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-028de4d88b82baba.js" defer=""></script><script src="/_next/static/chunks/framework-1f8bbf35558976d0.js" defer=""></script><script src="/_next/static/chunks/main-872645af91bd57e9.js" defer=""></script><script src="/_next/static/chunks/pages/_app-2aae329e3c46aa18.js" defer=""></script><script src="/_next/static/chunks/2923-3106d5da30d19f66.js" defer=""></script><script src="/_next/static/chunks/4587-c8e2954a8f645bdf.js" defer=""></script><script src="/_next/static/chunks/7527-165de9d573ae0ee0.js" defer=""></script><script src="/_next/static/chunks/8562-28db67b24c2d831c.js" defer=""></script><script src="/_next/static/chunks/2162-5470b74b741fcdff.js" defer=""></script><script src="/_next/static/chunks/pages/changelog/%5B%5B...slug%5D%5D-c3de88e3fac87498.js" defer=""></script><script src="/_next/static/isuhRUmRDqSyK_siELRjG/_buildManifest.js" defer=""></script><script src="/_next/static/isuhRUmRDqSyK_siELRjG/_ssgManifest.js" defer=""></script></head><body><div id="__next"><!--$--><!--/$--><div class="relative border-gray-800 font-rubik antialiased bg-gray-100 text-gray-800"><header class="sticky z-40 top-0 w-full xl:overflow-y-visible bg-gray-900 text-white border-b border-b-gray-800 border-b border-b-gray-800"><div class="c-container flex justify-between items-center py-4 false"><a class="flex" href="/"><div class="w-[130px] h-[24px]"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350.92 64.54"><g fill="#fff"><path d="M341.56 12.58c-5.46 0-9.37 4.82-13.39 10.18C325.68 11.38 322.9 0 314.07 0S302.46 11.38 300 22.76c-4-5.36-7.93-10.18-13.39-10.18-3.47 0-9.35 2.37-9.35 11.22v16.11c0 8.69 4.64 10.82 7.42 11.54 4.8 1.25 16.36 2.4 29.37 2.4s24.57-1.15 29.36-2.4c2.79-.72 7.43-2.85 7.43-11.54V23.8c0-8.85-5.88-11.22-9.36-11.22M314.07 5c5.29 0 7.3 10.44 10.12 23-3.09 3.79-6.36 6.86-10.12 6.86S307 31.78 304 28c2.63-11.72 4.65-23 10.12-23m-31.84 34.91V23.8c0-5.59 3-6.2 4.33-6.2 3.85 0 8 6.43 11.94 11.59-2.83 11.71-5.78 18.81-12.75 17.37-1.82-.5-3.52-1.65-3.52-6.65M296 48.05c3-3.35 5-8.58 6.5-14.12 3.23 3.38 6.95 5.93 11.57 5.93s8.33-2.55 11.56-5.93c1.5 5.54 3.47 10.77 6.55 14.12-5.39.5-11.88.79-18.11.79s-12.73-.29-18.12-.79m49.91-8.14c0 5-1.71 6.15-3.52 6.65-7 1.48-9.93-5.66-12.72-17.37 3.95-5.16 8.09-11.59 11.94-11.59 1.3 0 4.34.61 4.34 6.2ZM1.13 52.07a1.12 1.12 0 0 1-.79-.34 1.16 1.16 0 0 1-.34-.85 1.52 1.52 0 0 1 .11-.52L14 13.74a2 2 0 0 1 .62-1 1.81 1.81 0 0 1 1.25-.4h5a1.81 1.81 0 0 1 1.25.4 2.44 2.44 0 0 1 .68 1l13.82 36.62a2.52 2.52 0 0 1 .06.52 1.16 1.16 0 0 1-.34.85 1.12 1.12 0 0 1-.79.34h-3.92a1.4 1.4 0 0 1-1.07-.37 2.41 2.41 0 0 1-.46-.7l-2.89-7.48H9.47L6.63 51a2 2 0 0 1-.48.66 1.5 1.5 0 0 1-1.1.37Zm10.15-14.18H25.4l-7.09-18.82ZM42.52 62.84a1.25 1.25 0 0 1-1.3-1.31V23.89a1.24 1.24 0 0 1 1.3-1.3h3.57a1.25 1.25 0 0 1 1.31 1.3v2.38a11.6 11.6 0 0 1 3.62-3A11.35 11.35 0 0 1 56.58 22a12.67 12.67 0 0 1 5.33 1 10.13 10.13 0 0 1 3.68 2.83 12.56 12.56 0 0 1 2.24 4.26 19.79 19.79 0 0 1 .88 5.21c0 .64.06 1.31.06 2s0 1.34-.06 2a18.1 18.1 0 0 1-.82 5.16 13.14 13.14 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.56 12.56 0 0 1-5.36 1.05 11.36 11.36 0 0 1-5.36-1.16 10.55 10.55 0 0 1-3.54-3v13a1.27 1.27 0 0 1-.37.94 1.38 1.38 0 0 1-1 .37ZM55 47.3a6.63 6.63 0 0 0 4.17-1.16 6.53 6.53 0 0 0 2.18-3 14.43 14.43 0 0 0 .8-4.14 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.8-4.14 6.58 6.58 0 0 0-2.18-3A6.69 6.69 0 0 0 55 27.35a6.44 6.44 0 0 0-6.49 4.22 12.43 12.43 0 0 0-.82 3.77q-.06 1-.06 2.16c0 .79 0 1.53.06 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86A6.83 6.83 0 0 0 55 47.3ZM75.71 62.84a1.27 1.27 0 0 1-1.3-1.31V23.89a1.25 1.25 0 0 1 1.3-1.3h3.58a1.29 1.29 0 0 1 .93.36 1.27 1.27 0 0 1 .37.94v2.38a11.53 11.53 0 0 1 3.63-3A11.29 11.29 0 0 1 89.77 22a12.64 12.64 0 0 1 5.33 1 10.16 10.16 0 0 1 3.69 2.83 12.74 12.74 0 0 1 2.21 4.3 20.21 20.21 0 0 1 .88 5.21v4a18.1 18.1 0 0 1-.83 5.16 12.94 12.94 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.53 12.53 0 0 1-5.36 1.05 11.31 11.31 0 0 1-5.35-1.16 10.49 10.49 0 0 1-3.55-3v13a1.27 1.27 0 0 1-.37.94 1.34 1.34 0 0 1-1 .37ZM88.19 47.3a6.1 6.1 0 0 0 6.35-4.19 14.43 14.43 0 0 0 .79-4.11 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.79-4.14 6.1 6.1 0 0 0-6.35-4.19 6.44 6.44 0 0 0-6.5 4.22 12.74 12.74 0 0 0-.82 3.77c0 .64-.05 1.36-.05 2.16s0 1.53.05 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86 6.84 6.84 0 0 0 4.09 1.1ZM122.17 52.63a21.18 21.18 0 0 1-8.56-1.53 12.82 12.82 0 0 1-5.27-4 9.44 9.44 0 0 1-1.93-5.25 1.1 1.1 0 0 1 .34-.79 1.15 1.15 0 0 1 .85-.34h4a1.47 1.47 0 0 1 1 .31 2.75 2.75 0 0 1 .57.76 6.36 6.36 0 0 0 1.36 2.39 7.72 7.72 0 0 0 2.86 2 12.06 12.06 0 0 0 4.73.79q4.48 0 6.61-1.53a4.88 4.88 0 0 0 2.12-4.19 3.83 3.83 0 0 0-1.13-2.87 10.56 10.56 0 0 0-3.52-2c-1.58-.6-3.64-1.25-6.17-1.93a36.52 36.52 0 0 1-7-2.55 10.29 10.29 0 0 1-4.19-3.57 9.81 9.81 0 0 1-1.39-5.44 9.72 9.72 0 0 1 1.73-5.67 11.66 11.66 0 0 1 4.93-3.94 18.66 18.66 0 0 1 7.68-1.45 19 19 0 0 1 6.35 1 14 14 0 0 1 4.57 2.55 11.53 11.53 0 0 1 2.77 3.4 8.31 8.31 0 0 1 1 3.57 1.18 1.18 0 0 1-.32.77 1.09 1.09 0 0 1-.87.37h-4.14a1.83 1.83 0 0 1-.88-.23 1.5 1.5 0 0 1-.65-.85 5.22 5.22 0 0 0-2.44-3.46 9.49 9.49 0 0 0-5.39-1.42 10.19 10.19 0 0 0-5.41 1.28 4.35 4.35 0 0 0-2.07 4 4.24 4.24 0 0 0 1 2.89 8.38 8.38 0 0 0 3.18 2 58.53 58.53 0 0 0 5.75 1.9 43.26 43.26 0 0 1 7.76 2.54 10.38 10.38 0 0 1 4.4 3.51 9.64 9.64 0 0 1 1.41 5.42 10 10 0 0 1-1.95 6.2 12.32 12.32 0 0 1-5.44 4 22 22 0 0 1-8.25 1.36ZM143.77 17.37a1.34 1.34 0 0 1-1-.37 1.24 1.24 0 0 1-.37-.93v-3.58a1.34 1.34 0 0 1 .37-1 1.32 1.32 0 0 1 1-.4h4.31a1.39 1.39 0 0 1 1 .4 1.29 1.29 0 0 1 .4 1v3.58a1.2 1.2 0 0 1-.4.93 1.41 1.41 0 0 1-1 .37Zm.34 34.7a1.38 1.38 0 0 1-1-.37 1.27 1.27 0 0 1-.37-.94V23.89a1.27 1.27 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.69a1.25 1.25 0 0 1 1.3 1.3v26.87a1.27 1.27 0 0 1-.37.94 1.28 1.28 0 0 1-.93.37ZM168.5 64.54a17.5 17.5 0 0 1-6.58-1.05 12.16 12.16 0 0 1-4-2.52 9.27 9.27 0 0 1-2.09-2.97 8.1 8.1 0 0 1-.65-2.38 1.13 1.13 0 0 1 .34-1 1.3 1.3 0 0 1 1-.39h3.86a1.51 1.51 0 0 1 .85.22 1.8 1.8 0 0 1 .56 1 11.19 11.19 0 0 0 1 1.73 5 5 0 0 0 1.93 1.61 7.69 7.69 0 0 0 3.57.68 11 11 0 0 0 4.05-.65 4.82 4.82 0 0 0 2.5-2.3 9.59 9.59 0 0 0 .87-4.47v-3.84a10.93 10.93 0 0 1-3.64 2.79 11.93 11.93 0 0 1-5.38 1.08 12.69 12.69 0 0 1-5.36-1 9.78 9.78 0 0 1-3.69-2.86 13.36 13.36 0 0 1-2.21-4.28 18.82 18.82 0 0 1-.82-5.27q-.06-1.53 0-3.12a18.94 18.94 0 0 1 .8-5.16 12.85 12.85 0 0 1 2.21-4.39 10.34 10.34 0 0 1 3.71-2.94 12.23 12.23 0 0 1 5.36-1.06 11.1 11.1 0 0 1 5.52 1.25 11.77 11.77 0 0 1 3.66 3.06V24a1.37 1.37 0 0 1 .37-1 1.31 1.31 0 0 1 1-.39h3.57a1.33 1.33 0 0 1 1.35 1.39v27.39a16.14 16.14 0 0 1-1.38 6.91 10 10 0 0 1-4.4 4.59 16.32 16.32 0 0 1-7.88 1.65Zm-.17-17.69a6.62 6.62 0 0 0 4.11-1.19 7.39 7.39 0 0 0 2.33-3 10.87 10.87 0 0 0 .87-3.71c0-.49.06-1.12.06-1.9s0-1.39-.06-1.84a11.09 11.09 0 0 0-.87-3.74 7.13 7.13 0 0 0-2.33-3 6.74 6.74 0 0 0-4.11-1.16 6.85 6.85 0 0 0-4.17 1.16 6.49 6.49 0 0 0-2.24 3 14.43 14.43 0 0 0-.79 4.14v2.84a14.62 14.62 0 0 0 .79 4.11 6.52 6.52 0 0 0 2.24 3.06 6.85 6.85 0 0 0 4.17 1.23ZM190.13 52.07a1.38 1.38 0 0 1-1-.37 1.31 1.31 0 0 1-.37-.94V23.89a1.31 1.31 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.63a1.25 1.25 0 0 1 1.31 1.3v2.44a12.29 12.29 0 0 1 3.8-3.09 11.91 11.91 0 0 1 5.72-1.24 11.34 11.34 0 0 1 6.12 1.59 10.28 10.28 0 0 1 3.92 4.41 15.55 15.55 0 0 1 1.37 6.77v16a1.25 1.25 0 0 1-.4.94 1.39 1.39 0 0 1-1 .37h-3.92a1.28 1.28 0 0 1-.93-.37 1.27 1.27 0 0 1-.37-.94V35.06a8.33 8.33 0 0 0-1.79-5.67 6.45 6.45 0 0 0-5.13-2 6.84 6.84 0 0 0-5.18 2 7.83 7.83 0 0 0-2 5.67v15.7a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37ZM230.92 52.63a11.76 11.76 0 0 1-5.25-1.16 9.93 9.93 0 0 1-3.74-3.09 7.31 7.31 0 0 1-1.39-4.38 7.42 7.42 0 0 1 3.18-6.27 18.1 18.1 0 0 1 8.39-3.09l8-1.19v-1.4a5.5 5.5 0 0 0-1.36-4c-.91-.94-2.42-1.41-4.54-1.41a6.9 6.9 0 0 0-3.74.9 5.22 5.22 0 0 0-2 2.44 1.32 1.32 0 0 1-1.25.74h-3.51a1.2 1.2 0 0 1-.94-.34 1.34 1.34 0 0 1-.31-.91 5.88 5.88 0 0 1 .71-2.12 8.28 8.28 0 0 1 2.07-2.5 11.76 11.76 0 0 1 3.66-2 15.47 15.47 0 0 1 5.35-.82 17.06 17.06 0 0 1 5.9.88 9.93 9.93 0 0 1 3.8 2.35 9.17 9.17 0 0 1 2.07 3.4 12.46 12.46 0 0 1 .65 4v18.1a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37h-3.63a1.25 1.25 0 0 1-1.3-1.31v-2.38a9.3 9.3 0 0 1-2 2 10.74 10.74 0 0 1-3 1.62 13.85 13.85 0 0 1-4.42.63Zm1.59-4.82a8.24 8.24 0 0 0 3.91-.93A6.74 6.74 0 0 0 239.2 44a10.38 10.38 0 0 0 1-4.88v-1.4l-6.13 1a13.25 13.25 0 0 0-5.52 1.75 3.66 3.66 0 0 0-1.85 3.06 3.46 3.46 0 0 0 .85 2.41 5.33 5.33 0 0 0 2.16 1.42 8 8 0 0 0 2.8.45ZM254.47 52.07a1.25 1.25 0 0 1-1.3-1.31V13.12a1.25 1.25 0 0 1 1.3-1.31h3.74a1.25 1.25 0 0 1 1.3 1.31v37.64a1.25 1.25 0 0 1-1.3 1.31Z"></path></g></svg></div></a><div class="hidden xl:block"><ul class="flex"><li><div class="block py-2 px-2 xl:px-3 no-underline cursor-pointer select-none text-gray-200 hover:text-white"><span>Features</span><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-down" class="svg-inline--fa fa-angle-down inline-block pb-0.5 ml-2 text-gray-400 text-xxs" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"></path></svg><div class="absolute mt-0 pt-2.5 z-10 w-72 hidden"><div class="w-72 px-3 py-4 bg-white shadow rounded-lg text-left"><h3 class="px-2 c_h-heading c_h-heading--caps text-sm tracking-wider text-gray-600 pb-2">Monitoring features</h3><ul><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/errors"><div class="text-orange-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Error tracking</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/performance"><div class="text-green-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Performance monitoring</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/hosts"><div class="text-teal-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Host monitoring</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/anomaly-detection"><div class="text-red-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Anomaly detection</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/uptime-monitoring"><div class="text-yellow-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Uptime monitoring</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/metrics"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Metric dashboards</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/workflow"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Workflow</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/log-management"><div class="text-hot-pink-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Log management</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/automated-dashboards"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Automated Dashboards</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/check-ins"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Check-ins</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/tour/time-detective"><div class="text-azure-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="user-secret" class="svg-inline--fa fa-user-secret fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48H45.4C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4H342.7c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208H267.6c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2H168c-22.1 0-40-17.9-40-40V169.6c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4V184c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Time Detective</span></a></li></ul></div></div></div></li><li><div class="block py-2 px-2 xl:px-3 no-underline cursor-pointer select-none text-gray-200 hover:text-white"><span>Languages</span><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-down" class="svg-inline--fa fa-angle-down inline-block pb-0.5 ml-2 text-gray-400 text-xxs" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"></path></svg><div class="absolute mt-0 pt-2.5 z-10 w-72 hidden"><div class="w-72 px-3 py-4 bg-white shadow rounded-lg text-left"><h3 class="px-2 c_h-heading c_h-heading--caps text-sm tracking-wider text-gray-600 pb-2">Supported Languages</h3><ul><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/ruby"><div class="text-red-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Ruby (on Rails) APM</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/elixir"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Elixir APM</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/nodejs"><div class="text-green-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Node.js APM</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/javascript"><div class="text-yellow-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">JavaScript Error Tracking</span></a></li><li><a class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group" href="/python"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Python APM</span></a></li></ul></div></div></div></li><li><a class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white " href="/learning-center">Learn</a></li><li><a href="https://docs.appsignal.com" class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white ">Docs</a></li><li><a href="https://blog.appsignal.com" class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white ">Blog</a></li><li><a class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white " href="/plans">Pricing</a></li></ul></div><ul class="hidden xl:flex justify-end space-x-4 dark"><li><a href="https://appsignal.com/users/sign_in" class="c-button c-button--sm c-button--white dark:c-button--gray">Login</a></li><li><a href="https://appsignal.com/users/sign_up" class="c-button c-button--sm">Start free trial</a></li></ul><div class="xl:hidden dark"><a href="#menu" class="c-button c-button--sm c-button--white dark:c-button--gray"><div class="flex item-center space-x-2 pr-0.5"><div>Menu</div><div class="inline-block w-2 pt-0.25"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"></path></svg></div></div></a></div></div><nav class="hidden border-t border-gray-700"><div class="dark c-container h-screen overflow-y-auto pt-7 pb-40"><div><h3 class="c_h-heading c_h-heading--caps text-sm text-gray-200 pb-3 mb-3 border-b border-gray-700">Monitoring features</h3><ul class="pb-8 space-y-1"><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/errors"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></figure><span>Error tracking</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/performance"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></figure><span>Performance monitoring</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/hosts"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></figure><span>Host monitoring</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/anomaly-detection"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></figure><span>Anomaly detection</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/uptime-monitoring"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></figure><span>Uptime monitoring</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/metrics"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></figure><span>Metric dashboards</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/workflow"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></figure><span>Workflow</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/log-management"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></figure><span>Log management</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/automated-dashboards"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></figure><span>Automated Dashboards</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/check-ins"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></figure><span>Check-ins</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/tour/time-detective"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="user-secret" class="svg-inline--fa fa-user-secret " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48H45.4C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4H342.7c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208H267.6c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2H168c-22.1 0-40-17.9-40-40V169.6c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4V184c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z"></path></svg></figure><span>Time Detective</span></a></li></ul></div><div><h3 class="c_h-heading c_h-heading--caps text-sm text-gray-200 pb-3 mb-3 border-b border-gray-700">Supported Languages</h3><ul class="pb-8 space-y-1"><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/ruby"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></figure><span>Ruby (on Rails) APM</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/elixir"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></figure><span>Elixir APM</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/nodejs"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></figure><span>Node.js APM</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/javascript"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></figure><span>JavaScript Error Tracking</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/python"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></figure><span>Python APM</span></a></li></ul></div><div></div><div></div><div></div><div></div><div><ul><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/learning-center"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book-open" class="svg-inline--fa fa-book-open " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5V78.6c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8V454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5V83.8c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11V456c0 11.4 11.7 19.3 22.4 15.5z"></path></svg></figure><span>Learn</span></a></li><li><a href="https://docs.appsignal.com" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book" class="svg-inline--fa fa-book " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z"></path></svg></figure><span>Docs</span></a></li><li><a href="https://blog.appsignal.com" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></figure><span>Blog</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/plans"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="dollar-sign" class="svg-inline--fa fa-dollar-sign " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M160 0c17.7 0 32 14.3 32 32V67.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.1c-.4-.1-.9-.1-1.3-.2l-.2 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11V32c0-17.7 14.3-32 32-32z"></path></svg></figure><span>Pricing</span></a></li><li><a href="https://appsignal.com/users/sign_in" class="block mt-4 text-center c-button c-button--sm c-button--gray">Login</a></li><li><a href="https://appsignal.com/users/sign_up" class="block mt-4 text-center c-button c-button--sm">Start free trial</a></li></ul></div></div></nav></header><section class="relative py-16 bg-gray-900 dark"><div class="z-0 absolute inset-0 w-full h-full sm:bg-[url('/assets/pages/changelog/changelog-left.png')] bg-[left] bg-contain bg-no-repeat"></div><div class="z-0 absolute inset-0 w-full h-full sm:bg-[url('/assets/pages/changelog/changelog-right.png')] bg-[right] bg-contain bg-no-repeat"></div><div class="z-0 absolute inset-0 w-full h-full from-transparent via-gray-900 to-transparent bg-gradient bg-gradient-to-r"></div><div class="c-container"><header class="relative self-center max-w-4xl space-y-4 text-center mx-auto"><h1 class="c_h-heading c_h-heading--caps font-normal tracking-widest c_h-text--xl-fluid text-azure-300">Changelog</h1><h2 class="c_h-heading dark:text-white c_h-heading--8xl-fluid leading-tighter text-balance">Improving AppSignal, one deploy at a time.</h2></header></div></section><section class="sticky top-[66px] lg:top-[72px] z-30 overflow-x-auto scrollbar-hide"><div class="px-2.5 border-b border-gray-200 w-full min-w-fit bg-gray-100"><ul class="-mb-px flex w-fit mx-auto whitespace-nowrap"><li><a href="/changelog/" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-blue-600 border-blue-600">All entries</span></a></li><li><a href="/changelog/app" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">App</span></a></li><li><a href="/changelog/ruby" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Ruby</span></a></li><li><a href="/changelog/elixir" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Elixir</span></a></li><li><a href="/changelog/nodejs" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Node.js</span></a></li><li><a href="/changelog/javascript" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">JavaScript</span></a></li><li><a href="/changelog/collector" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Collector</span></a></li><li><a href="/changelog/standalone-agent" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Standalone Agent</span></a></li><li><a href="/changelog/python" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Python</span></a></li><li><a href="/changelog/other" class="block px-2.5 no-underline"><span class="py-3 block h-full border-b no-underline transition text-gray-600 border-gray-200 hover:text-gray-700">Other</span></a></li></ul></div></section><section class="relative py-8 lg:py-16 bg-white"><div class="c-container"><div class="relative max-w-3xl px-1 sm:px-0 mx-auto"><article id="elixir-package-v2150" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/elixir/2025-03-14-elixir-2.15.0"><h1>Elixir package v2.15.0</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--purple no-underline" href="/changelog/elixir">Elixir</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">2.15.0</span></div><h2 id="changed">Changed</h2> <ul> <li>Switch Hackney to Finch as the bundled HTTP client to operate within the integration</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2150">Elixir package v2.15.0 changelog</a> for more information.</p></div></div></article><article id="improve-sql-sanitisation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/elixir/2025-03-14-elixir-2.15.1"><h1>Improve SQL sanitisation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--purple no-underline" href="/changelog/elixir">Elixir</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">2.15.1</span></div><h2 id="changed">Changed</h2> <ul> <li>Improve SQL sanitisation for functions and numbered placeholders.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2151">Elixir package v2.15.1 changelog</a> for more information.</p></div></div></article><article id="improve-sql-sanitisation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/nodejs/2025-03-14-node.js-3.6.3"><h1>Improve SQL sanitisation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--green no-underline" href="/changelog/nodejs">Node.js</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">3.6.3</span></div><h2 id="changed">Changed</h2> <ul> <li>Improve SQL sanitisation for functions and numbered placeholders.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#363">Node.js package v3.6.3 changelog</a> for more information.</p></div></div></article><article id="improve-sql-sanitisation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/python/2025-03-14-python-1.5.1"><h1>Improve SQL sanitisation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--blue no-underline" href="/changelog/python">Python</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">1.5.1</span></div><h2 id="changed">Changed</h2> <ul> <li>Improve SQL sanitisation for functions and numbered placeholders.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-python/blob/main/CHANGELOG.md#151">Python package v1.5.1 changelog</a> for more information.</p></div></div></article><article id="improve-sql-sanitisation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/ruby/2025-03-14-ruby-4.5.5"><h1>Improve SQL sanitisation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--red no-underline" href="/changelog/ruby">Ruby</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">4.5.5</span></div><h2 id="changed">Changed</h2> <ul> <li>Improve SQL sanitisation for functions and numbered placeholders.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#455">Ruby gem v4.5.5 changelog</a> for more information.</p></div></div></article><article id="improve-sql-sanitisation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 14, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/standalone-agent/2025-03-14-standalone-agent-0.36.2"><h1>Improve SQL sanitisation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/standalone-agent">Standalone Agent</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.36.2</span></div><h2 id="changed">Changed</h2> <ul> <li>Improve SQL sanitisation for functions and numbered placeholders.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/standalone-agent/installation/linux-package.html">our standalone agent packages</a> and as a <a href="https://hub.docker.com/r/appsignal/agent">Docker image</a>.</p></div></div></article><article id="update-error-incident-generation" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 13, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-13-collector-0.5.0"><h1>Update error incident generation</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.5.0</span></div><h2 id="added">Added</h2> <ul> <li>Update our support OpenTelemetry Semantic Conventions for code attributes used in unique span detection.</li> </ul> <h2 id="changed">Changed</h2> <ul> <li> <p>The shutdown behavior on internal errors is improved, and now logs what crashed and why.</p> </li> <li> <p>Limit <code>appsignal.tag.<key></code> tag values to 256 characters.</p> </li> <li> <p>Rename an internal span event attribute for metadata distributions. Older collectors will no longer report metadata distributions for error incidents.</p> <p>This will create new incidents for existing errors. This is intentional.</p> </li> </ul> <h2 id="fixed">Fixed</h2> <ul> <li>Fix a crash on truncating Unicode values.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="configuration-via-request-headers" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 11, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-11-collector-0.4.4"><h1>Configuration via request headers</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.4.4</span></div><h2 id="added">Added</h2> <ul> <li> <p>Configure AppSignal via HTTP request headers on export requests. If it's not possible to configure resource attributes in OpenTelemetry export data, configure AppSignal via request headers set on the export requests made to the collector's HTTP endpoints.</p> <p>Supported headers are:</p> <p>AppSignal-Config-Name: app name (required) AppSignal-Config-Environment: app environment (required) AppSignal-Config-PushApiKey: push API key (required) AppSignal-Config-Revision: app revision (required) AppSignal-Config-LanguageIntegration: language integration like ruby, elixir, php, etc. (required) OpenTelemetry-ServiceName: service name of the app OpenTelemetry-HostName: name of the app's host (required)</p> <p>For more information, see our <a href="https://docs.appsignal.com/opentelemetry/configuration/options.html">configuration documentation</a>.</p> </li> </ul> <h2 id="changed">Changed</h2> <ul> <li>Close HTTP connections from OpenTelemetry exports when we have successfully received the request. This fixes an issue with the server not shutting down when the connection is kept open.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="delay-agent-reboots" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 11, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/elixir/2025-03-11-elixir-2.14.1"><h1>Delay agent reboots</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--purple no-underline" href="/changelog/elixir">Elixir</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">2.14.1</span></div><h2 id="changed">Changed</h2> <ul> <li> <p>Delay and eventually halt agent reboots by the extension.</p> <p>The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.</p> <p>In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.</p> <p>This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.</p> </li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2141">Elixir package v2.14.1 changelog</a> for more information.</p></div></div></article><article id="delay-agent-reboots" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 11, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/nodejs/2025-03-11-node.js-3.6.2"><h1>Delay agent reboots</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--green no-underline" href="/changelog/nodejs">Node.js</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">3.6.2</span></div><h2 id="changed">Changed</h2> <ul> <li> <p>Delay and eventually halt agent reboots by the extension.</p> <p>The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.</p> <p>In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.</p> <p>This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.</p> </li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#362">Node.js package v3.6.2 changelog</a> for more information.</p></div></div></article><article id="delay-agent-reboots" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 11, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/ruby/2025-03-11-ruby-4.5.4"><h1>Delay agent reboots</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--red no-underline" href="/changelog/ruby">Ruby</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">4.5.4</span></div><h2 id="changed">Changed</h2> <ul> <li> <p>Delay and eventually halt agent reboots by the extension.</p> <p>The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.</p> <p>In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.</p> <p>This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.</p> </li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#454">Ruby gem v4.5.4 changelog</a> for more information.</p></div></div></article><article id="ignore-empty-environment-variables-for-config-options" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 06, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-06-collector-0.4.2"><h1>Ignore empty environment variables for config options</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.4.2</span></div><h2 id="added">Added</h2> <ul> <li>Add the <code>appsignal.config.otp_app</code> resource attribute config option. When set for Elixir applications, we will use the OTP app name to detect which stacktrace lines originate from the app, and which lines are from dependencies.</li> </ul> <h2 id="changed">Changed</h2> <ul> <li> <p>Consider empty environment variables as unset. From now on, an environment variable that's set to an empty string is considered unset when reading the collector configuration from system environment variables.</p> <p>In the example below, the environment variable will be considered unset. It will not fail on parsing an empty string as a number and set the default HTTP port instead.</p> <div class="relative my-8 group-[.is-breakout]:md:my-10 group-[.is-breakout]:md:-mx-6 dark:border dark:border-gray-200 dark:rounded-lg"><div class="group-[.code-header-hidden]:hidden absolute top-0 inset-x-0 bg-gray-800 dark:bg-white text-white dark:text-gray-900 rounded-t-lg overflow-hidden"><div class="flex items-center justify-between pr-4 font-mono text-sm dark:border-b dark:border-gray-200"><div class="h-10"><div class="group-[.is-code-tabs]:hidden flex items-center h-[41px] px-4 sm:px-6 bg-gray-900 dark:bg-gray-100 dark:text-gray-900 dark:border-r dark:border-gray-200">Shell</div></div><div class="flex items-center"><button class="group/svg group-[.is-code-tabs]:invisible sm:group-[.is-code-tabs]:visible w-6 h-6 pr-1 -mr-1 flex justify-end items-center hover:cursor-pointer"><svg width="13" height="15" viewBox="0 0 13 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path class="transition fill-gray-300 group-hover/svg:fill-white dark:fill-gray-500 group-hover/svg:dark:fill-gray-600" d="M8.75 13H4.15625C3.30859 13 2.625 12.3164 2.625 11.4688V3.375H0.65625C0.273438 3.375 0 3.67578 0 4.03125V14.0938C0 14.4766 0.273438 14.75 0.65625 14.75H8.09375C8.44922 14.75 8.75 14.4766 8.75 14.0938V13ZM8.75 3.59375V0.75H4.15625C3.77344 0.75 3.5 1.05078 3.5 1.40625V11.4688C3.5 11.8516 3.77344 12.125 4.15625 12.125H11.5938C11.9492 12.125 12.25 11.8516 12.25 11.4688V4.25H9.40625C9.02344 4.25 8.75 3.97656 8.75 3.59375ZM12.0312 2.74609L10.2539 0.96875C10.1172 0.832031 9.95312 0.75 9.78906 0.75H9.625V3.375H12.25V3.21094C12.25 3.04688 12.168 2.88281 12.0312 2.74609Z"></path></svg></button></div></div></div><pre data-raw="APPSIGNAL_HTTP_PORT="" " class="z-0 !m-0 !pl-4 dark:bg-gray-100"><div class="sm:px-2 pt-10 group-[.code-header-hidden]:pt-0"><code>APPSIGNAL_HTTP_PORT="" </code></div></pre></div> <p>This behavior is changed for the following config options:</p> <ul> <li><code>APPSIGNAL_CPU_COUNT</code></li> <li><code>APPSIGNAL_ENABLE_HOST_METRICS</code></li> <li><code>APPSIGNAL_FILES_WORLD_ACCESSIBLE</code></li> <li><code>APPSIGNAL_HOSTNAME</code></li> <li><code>APPSIGNAL_HTTP_PORT</code></li> <li><code>APPSIGNAL_LOG_LEVEL</code></li> <li><code>APPSIGNAL_PUSH_API_ENDPOINT</code></li> <li><code>APPSIGNAL_PUSH_API_KEY</code></li> <li><code>APPSIGNAL_RUNNING_IN_CONTAINER</code></li> </ul> </li> <li> <p>In the <code>appsignal/collector</code> Docker image we will now listen to the <code>PORT</code> environment variable if it's set, and use it to configure the HTTP server's port.</p> <p>If the <code>APPSIGNAL_HTTP_PORT</code> environment variable is also set in addition to the <code>PORT</code> environment variable, it will read from the <code>APPSIGNAL_HTTP_PORT</code> environment variable.</p> </li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="support-gzipped-payloads" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 06, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-06-collector-0.4.3"><h1>Support gzipped payloads</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.4.3</span></div><h2 id="added">Added</h2> <ul> <li>Gzipped payloads for the collector requests are now accepted if specified in the <code>Content-Encoding</code> header.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="improve-sidekiq-8-support" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 06, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/ruby/2025-03-06-ruby-4.5.3"><h1>Improve Sidekiq 8 support</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--red no-underline" href="/changelog/ruby">Ruby</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">4.5.3</span></div><h2 id="changed">Changed</h2> <ul> <li>Specify stricter Rack version requirement. The Ruby gem relies on the <code>Rack::Events</code> constant which was introduced in Rack 2. Update our version requirement to require Rack 2 or newer.</li> </ul> <h2 id="fixed">Fixed</h2> <ul> <li>Fix the queue time reporting for Sidekiq 8 jobs. It would report high negative values for the queue time with Sidekiq 8.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#453">Ruby gem v4.5.3 changelog</a> for more information.</p></div></div></article><article id="container-host-metrics-and-bug-fixes" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 05, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-05-collector-0.4.1"><h1>Container host metrics and bug fixes</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.4.1</span></div><h2 id="changed">Changed</h2> <ul> <li>Log debug messages and warnings from the config initialization. Previously, any debug messages or warnings that should have been logged upon config initialization where not logged. Now, all config log messages are logged, including debug messages even if the log level is configured as info. This may be improved in the future.</li> <li>Shut down the collector in case of an internal error. We've seen problems where internal channels close and it causes the collector to stop reporting data. In this case, log what happens and shut down.</li> </ul> <h2 id="fixed">Fixed</h2> <ul> <li>Disable the host metrics only on the collector container, by default. When the collector is installed on a container alongside the app, it will collect container host metrics.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="filter-opentelemetry-query-parameters-span-attributes" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Mar 03, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-03-03-collector-0.4.0"><h1>Filter OpenTelemetry query parameters span attributes</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.4.0</span></div><h2 id="added">Added</h2> <ul> <li> <p>Filter query parameters in the <code>url.query</code> span attribute. When an <code>url.query</code> attribute contains an URL encoded query parameter we will filter out the keys configured in the <code>appsignal.config.filter_request_query_parameters</code> resource attribute.</p> <p>In the situation that a <code>url.query</code> span attribute has the value <code>password=secret&some_param=some_value</code>, and the <code>appsignal.config.filter_request_query_parameters</code> resource attribute is configured with <code>["password"]</code>, the <code>url.query</code> span attribute will be stored as <code>password=[FILTERED]&some_param=some_value</code>.</p> <p>If no <code>appsignal.request.query_parameters</code> span attribute is set, we will store the query parameters as a JSON map on this attribute. For example:</p> <figure data-rehype-pretty-code-figure=""><div class="relative my-8 group-[.is-breakout]:md:my-10 group-[.is-breakout]:md:-mx-6 dark:border dark:border-gray-200 dark:rounded-lg"><div class="group-[.code-header-hidden]:hidden absolute top-0 inset-x-0 bg-gray-800 dark:bg-white text-white dark:text-gray-900 rounded-t-lg overflow-hidden"><div class="flex items-center justify-between pr-4 font-mono text-sm dark:border-b dark:border-gray-200"><div class="h-10"><div class="group-[.is-code-tabs]:hidden flex items-center h-[41px] px-4 sm:px-6 bg-gray-900 dark:bg-gray-100 dark:text-gray-900 dark:border-r dark:border-gray-200">JSON</div></div><div class="flex items-center"><button class="group/svg group-[.is-code-tabs]:invisible sm:group-[.is-code-tabs]:visible w-6 h-6 pr-1 -mr-1 flex justify-end items-center hover:cursor-pointer"><svg width="13" height="15" viewBox="0 0 13 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path class="transition fill-gray-300 group-hover/svg:fill-white dark:fill-gray-500 group-hover/svg:dark:fill-gray-600" d="M8.75 13H4.15625C3.30859 13 2.625 12.3164 2.625 11.4688V3.375H0.65625C0.273438 3.375 0 3.67578 0 4.03125V14.0938C0 14.4766 0.273438 14.75 0.65625 14.75H8.09375C8.44922 14.75 8.75 14.4766 8.75 14.0938V13ZM8.75 3.59375V0.75H4.15625C3.77344 0.75 3.5 1.05078 3.5 1.40625V11.4688C3.5 11.8516 3.77344 12.125 4.15625 12.125H11.5938C11.9492 12.125 12.25 11.8516 12.25 11.4688V4.25H9.40625C9.02344 4.25 8.75 3.97656 8.75 3.59375ZM12.0312 2.74609L10.2539 0.96875C10.1172 0.832031 9.95312 0.75 9.78906 0.75H9.625V3.375H12.25V3.21094C12.25 3.04688 12.168 2.88281 12.0312 2.74609Z"></path></svg></button></div></div></div><pre tabindex="0" data-language="json" data-theme="github-dark" data-raw="{ "password": "[FILTERED]", "some_param": "some_value" } " class="z-0 !m-0 !pl-4 dark:bg-gray-100"><div class="sm:px-2 pt-10 group-[.code-header-hidden]:pt-0"><code data-language="json" data-theme="github-dark" style="display:grid"><span data-line=""><span style="color:#E1E4E8">{</span></span> <span data-line=""><span style="color:#79B8FF"> "password"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"[FILTERED]"</span><span style="color:#E1E4E8">,</span></span> <span data-line=""><span style="color:#79B8FF"> "some_param"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"some_value"</span></span> <span data-line=""><span style="color:#E1E4E8">}</span></span></code></div></pre></div></figure> </li> </ul> <h2 id="changed">Changed</h2> <ul> <li> <p>Rename the <code>working_dir_path</code> config option to <code>working_directory_path</code>. This names matches with the naming in our other tools and integrations.</p> <p>This is a breaking change: With this change the <code>working_dir_path</code> config option will no longer work.</p> </li> <li> <p>When the <code>appsignal.config.send_request_query_parameters</code> resource attribute config option value is set to <code>false</code>, we will remove the <code>url.query</code> span attribute from spans.</p> </li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="cumulative-histogram-support-and-improved-query-sanitization" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Feb 27, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/collector/2025-02-27-collector-0.3.1"><h1>Cumulative histogram support and improved query sanitization</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--teal no-underline" href="/changelog/collector">Collector</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">0.3.1</span></div><h2 id="added">Added</h2> <ul> <li>Sanitize database query attributes following the OpenTelemetry Semantic Conventions 1.30 database specification. We now sanitize SQL queries in the <code>db.query.text</code> attribute and Redis queries in the <code>db.operation.name</code> attribute.</li> <li>Add support for cumulative histograms. The previous known state of a cumulative histogram will be stored and its delta will be calculated, in order to send it to AppSignal as a delta histogram.</li> </ul> <p>This release can be installed through <a href="https://docs.appsignal.com/collector/installation.html">our collector packages and Docker image</a>.</p></div></div></article><article id="update-prisma-instrumentation-package" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Feb 27, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/nodejs/2025-02-27-node.js-3.6.1"><h1>Update Prisma instrumentation package</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--green no-underline" href="/changelog/nodejs">Node.js</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">3.6.1</span></div><h2 id="changed">Changed</h2> <ul> <li>Update Prisma instrumentation to version 6.4. This improves compatibility with new Prisma versions.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#361">Node.js package v3.6.1 changelog</a> for more information.</p></div></div></article><article id="more-heroku-errors-from-logs" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Feb 24, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/app/2025-02-24-Heroku-errors-from-logs"><h1>More Heroku errors from logs</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--red no-underline" href="/changelog/app">App</a></div><h2 id="added">Added</h2> <p>We now detect all <code>Hxx</code> router and <code>Rxx</code> resource errors from Heroku logs by parsing logfmt messages instead of using a single regex pattern.</p></div></div></article><article id="elixir-package-v2140" class="scroll-mt-32 sm:scroll-mt-40 lg:flex lg:-ml-32"><div class="lg:w-1/4 pl-8 lg:pl-0 lg:pr-7 lg:-mt-px lg:text-right"><span class="text-xs leading-6 text-gray-500">Feb 24, 2025</span></div><div class="relative pl-8 pb-16 md:pb-24 lg:w-3/4"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="code-commit" class="svg-inline--fa fa-code-commit absolute -left-[9px] -top-[20px] lg:top-[4px] w-[18px] h-[16px] text-gray-600" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z"></path></svg><div class="absolute top-2 mb-2 lg:top-9 lg:mb-3 bottom-0 left-0 w-px bg-gray-200"></div><div class="prose prose-h1:text-2xl prose-h1:leading-[24px] prose-h1:mb-4 prose-h2:text-xl prose-h2:pt-4 lg:prose-h2:pt-0 prose-h2:leading-6 prose-h2:mb-4 prose-figure:-my-3 max-w-none"><a class="text-gray-800 no-underline hover:underline" href="/changelog/elixir/2025-02-24-elixir-2.14.0"><h1>Elixir package v2.14.0</h1></a><div class="flex flex-wrap gap-2 mb-4"><a class="c-pill c-pill--border text-xs border c-pill--purple no-underline" href="/changelog/elixir">Elixir</a><span class="c-pill c-pill--border c-pill--gray text-xs border border-gray-200">2.14.0</span></div><h2 id="changed">Changed</h2> <ul> <li>Update bundled trusted root certificates</li> </ul> <h2 id="removed">Removed</h2> <ul> <li>Remove the OpenTelemetry beta feature in favor of the new <a href="https://docs.appsignal.com/collector">AppSignal collector</a>. If you are using the AppSignal agent to send OpenTelemetry data in our public beta through the <code>/enriched</code> endpoint on the agent's HTTP server, please migrate to the collector to continue using the beta. The collector has a much better implementation of this feature for the beta.</li> </ul> <h2 id="fixed">Fixed</h2> <ul> <li>Fix an issue where the AppSignal agent fails to download during installation, by restricting the Hackney dependency to version 1.21.0 or lower.</li> </ul> <p>View the <a href="https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2140">Elixir package v2.14.0 changelog</a> for more information.</p></div></div></article></div><section class="pt-12 text-center bg-white"><button class="c-button c-button--sm c-button--green mx-auto">load more</button></section></div></section><section class="relative py-12 md:py-16 bg-gray-800 dark"><div class="relative c-container space-y-5 text-center text-white"><div class="relative self-center space-y-4 mx-auto max-w-xl"><h1 class="c_h-heading c_h-heading--caps font-normal tracking-widest c_h-text--lg-fluid text-gray-300">Start your free trial</h1><h2 class="c_h-heading dark:text-white c_h-heading--5xl-fluid text-balance">Don鈥檛 let the bad bugs bite. Try AppSignal for free.</h2><p class="text-gray-700 dark:text-white dark:opacity-80 c_h-text--xl-fluid">AppSignal offers a 30-day free trial, no credit card is required. All features are available in all plans. Start monitoring your application in just a few clicks!</p></div><div class="flex gap-x-4 gap-y-2 flex-wrap justify-center"><a class="c-button c-button--base" href="https://appsignal.com/users/sign_up">Start free trial<!-- --> <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right c-button__icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></a><a class="c-button c-button--base c-button--gray" href="/plans">View pricing</a></div></div></section><!--$--><footer class="relative px-4 py-16 sm:pt-20 xl:pb-28 dark text-gray-300 bg-gray-900"><div class="c-container"><div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-10 gap-x-8 gap-y-10"><div class="col-span-1 sm:col-span-2 xl:col-span-2"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Features</h2><ul class="space-y-2 sm:columns-2 xl:columns-1"><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/errors">Error tracking</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/performance">Performance monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/hosts">Host monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/anomaly-detection">Anomaly detection</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/uptime-monitoring">Uptime monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/metrics">Metric dashboards</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/workflow">Workflow</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/log-management">Log management</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/automated-dashboards">Automated Dashboards</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/check-ins">Check-ins</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="user-secret" class="svg-inline--fa fa-user-secret " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48H45.4C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4H342.7c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208H267.6c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2H168c-22.1 0-40-17.9-40-40V169.6c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4V184c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z"></path></svg></span><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/tour/time-detective">Time Detective</a></div></div></li></ul></div><div class="col-span-1 xl:col-span-2"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Resources</h2><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/plans">Plans & pricing</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://docs.appsignal.com/" class="no-underline text-white undefined sm:text-lg hover:underline">Documentation</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://blog.appsignal.com/" class="no-underline text-white undefined sm:text-lg hover:underline">Blog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/customers">Customer Stories</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/changelog">Changelog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/learning-center">Learning Center</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/why">Why AppSignal</a></div></div></li></ul></div><div class="col-span-1 xl:col-span-2"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Compare</h2><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/alternative/new-relic-alternative">vs New Relic</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/alternative/datadog-alternative">vs Datadog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/alternative/sentry-alternative">vs Sentry</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/alternative/scout-apm-alternative">vs Scout APM</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/alternative/honeybadger-alternative">vs Honeybadger</a></div></div></li></ul></div><div class="col-span-1 xl:col-span-2"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Support</h2><p class="text-sm mb-4">Do you need help, have a feature request or just need someone to rubber duck with? Get in touch with one of our engineers.</p><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/contact">Contact us</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="mailto:support@appsignal.com" class="no-underline text-white undefined sm:text-lg hover:underline">Live chat</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://status.appsignal.com/" class="no-underline text-white undefined sm:text-lg hover:underline">Status</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/security">Security</a></div></div></li></ul></div><div class="col-span-1 xl:col-span-2"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">About us</h2><p class="text-sm mb-4"><span>AppSignal is located in the beautiful Netherlands. We love<!-- --> <a href="/waffles">stroopwafels</a>. If you do too, <a href="mailto:support@appsignal.com">let us know</a>. We might send you some!</span></p><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/about">About</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/jobs">Jobs</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://blog.appsignal.com/write-for-us" class="no-underline text-white undefined sm:text-lg hover:underline">Write for Our Blog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/diversity">Diversity</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/open-source">Open Source</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://x.com/appsignal" class="no-underline text-white undefined sm:text-lg hover:underline">X</a></div></div></li></ul></div><div class="col-span-1 sm:col-span-2 xl:col-span-10"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Languages</h2><div class="grid grid-cols-1 sm:grid-cols-3 xl:grid-cols-5 gap-6 sm:gap-12"><div class="order-1 sm:order-1 xl:order-1"><ul class="space-y-2 order-1 sm:order-1 xl:order-1"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></span><div><a class="no-underline text-white text-lg sm:text-lg hover:underline" href="/ruby">Ruby</a></div></div><p class="mt-1"><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/active-record-monitoring">Active Record</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/capistrano-monitoring">Capistrano</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/delayed-job-monitoring">Delayed::Job</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/garbage-collection-monitoring">Garbage Collection</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/global-vm-lock-monitoring">Global VM Lock</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/grape-monitoring">Grape</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/graphql-monitoring">GraphQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/hanami-monitoring">Hanami</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/mongodb-monitoring">MongoDB</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/padrino-monitoring">Padrino</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/puma-monitoring">Puma</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/que-monitoring">Que</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/rails-monitoring">Ruby on Rails</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/rake-monitoring">Rake</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/resque-monitoring">Resque</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/shoryuken-monitoring">Shoryuken</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/sidekiq-monitoring">Sidekiq</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/sinatra-monitoring">Sinatra</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/solid-queue-monitoring">Solid Queue</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/view-component-monitoring">ViewComponent</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/ruby/webmachine-monitoring">Webmachine</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="order-2 sm:order-4 xl:order-2"><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></span><div><a class="no-underline text-white text-lg sm:text-lg hover:underline" href="/elixir">Elixir</a></div></div><p class="mt-1"><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/absinthe-monitoring">Absinthe</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/ecto-monitoring">Ecto</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/erlang-monitoring">Erlang</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/finch-monitoring">Finch</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/oban-monitoring">Oban</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/phoenix-monitoring">Phoenix</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/plug-monitoring">Plug</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/elixir/tesla-monitoring">Tesla</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="order-3 sm:order-2 xl:order-3"><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></span><div><a class="no-underline text-white text-lg sm:text-lg hover:underline" href="/nodejs">Node.js</a></div></div><p class="mt-1"><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/amqplib-monitoring">AMQPlib</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/apollo-gateway-monitoring">Apollo Gateway</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/bullmq-monitoring">BullMQ</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/express-monitoring">Express</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/fastify-monitoring">Fastify</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/graphql-monitoring">GraphQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/knexjs-monitoring">Knex.js</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/koa-monitoring">Koa</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/mongodb-monitoring">MongoDB</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/mongoose-monitoring">Mongoose</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/mysql-monitoring">MySQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/nestjs-monitoring">NestJS</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/nextjs-monitoring">Next.js</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/pino-monitoring">Pino</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/postgresql-monitoring">PostgreSQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/prisma-monitoring">Prisma</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/redis-monitoring">Redis</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/remix-monitoring">Remix</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/restify-monitoring">Restify</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/nodejs/winston-monitoring">Winston</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="order-4 sm:order-5 xl:order-4"><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></span><div><a class="no-underline text-white text-lg sm:text-lg hover:underline" href="/javascript">JavaScript</a></div></div><p class="mt-1"><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/react-monitoring">React</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/vue-monitoring">Vue</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/angular-monitoring">Angular</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/ember-monitoring">Ember</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/preact-monitoring">Preact</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/javascript/stimulus-monitoring">Stimulus</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="order-5 sm:order-3 xl:order-5"><ul class="space-y-2 undefined"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></span><div><a class="no-underline text-white text-lg sm:text-lg hover:underline" href="/python">Python</a></div></div><p class="mt-1"><span class="sm:block"><a class="no-underline hover:underline" href="/python/celery-monitoring">Celery</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/django-monitoring">Django</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/fastapi-monitoring">FastAPI</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/flask-monitoring">Flask</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/jinja2-monitoring">Jinja2</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/mysql-monitoring">MySQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/pika-monitoring">Pika</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/postgresql-monitoring">PostgreSQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/redis-monitoring">Redis</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/request-monitoring">Request</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/sqlalchemy-monitoring">SQLAlchemy</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/sqlite-monitoring">SQLite</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/starlette-monitoring">Starlette</a><span class="sm:hidden">, </span></span><span class="sm:block"><a class="no-underline hover:underline" href="/python/wsgi-asgi-monitoring">WSGI and ASGI</a><span class="sm:hidden"></span></span></p></li></ul></div></div></div><div class="col-span-1 sm:col-span-2 xl:col-span-10 border-t border-gray-800 pt-6 xl:flex xl:items-center xl:justify-between"><div class="w-[168px] h-[31px] mb-4 xl:mb-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350.92 64.54"><g fill="#fff"><path d="M341.56 12.58c-5.46 0-9.37 4.82-13.39 10.18C325.68 11.38 322.9 0 314.07 0S302.46 11.38 300 22.76c-4-5.36-7.93-10.18-13.39-10.18-3.47 0-9.35 2.37-9.35 11.22v16.11c0 8.69 4.64 10.82 7.42 11.54 4.8 1.25 16.36 2.4 29.37 2.4s24.57-1.15 29.36-2.4c2.79-.72 7.43-2.85 7.43-11.54V23.8c0-8.85-5.88-11.22-9.36-11.22M314.07 5c5.29 0 7.3 10.44 10.12 23-3.09 3.79-6.36 6.86-10.12 6.86S307 31.78 304 28c2.63-11.72 4.65-23 10.12-23m-31.84 34.91V23.8c0-5.59 3-6.2 4.33-6.2 3.85 0 8 6.43 11.94 11.59-2.83 11.71-5.78 18.81-12.75 17.37-1.82-.5-3.52-1.65-3.52-6.65M296 48.05c3-3.35 5-8.58 6.5-14.12 3.23 3.38 6.95 5.93 11.57 5.93s8.33-2.55 11.56-5.93c1.5 5.54 3.47 10.77 6.55 14.12-5.39.5-11.88.79-18.11.79s-12.73-.29-18.12-.79m49.91-8.14c0 5-1.71 6.15-3.52 6.65-7 1.48-9.93-5.66-12.72-17.37 3.95-5.16 8.09-11.59 11.94-11.59 1.3 0 4.34.61 4.34 6.2ZM1.13 52.07a1.12 1.12 0 0 1-.79-.34 1.16 1.16 0 0 1-.34-.85 1.52 1.52 0 0 1 .11-.52L14 13.74a2 2 0 0 1 .62-1 1.81 1.81 0 0 1 1.25-.4h5a1.81 1.81 0 0 1 1.25.4 2.44 2.44 0 0 1 .68 1l13.82 36.62a2.52 2.52 0 0 1 .06.52 1.16 1.16 0 0 1-.34.85 1.12 1.12 0 0 1-.79.34h-3.92a1.4 1.4 0 0 1-1.07-.37 2.41 2.41 0 0 1-.46-.7l-2.89-7.48H9.47L6.63 51a2 2 0 0 1-.48.66 1.5 1.5 0 0 1-1.1.37Zm10.15-14.18H25.4l-7.09-18.82ZM42.52 62.84a1.25 1.25 0 0 1-1.3-1.31V23.89a1.24 1.24 0 0 1 1.3-1.3h3.57a1.25 1.25 0 0 1 1.31 1.3v2.38a11.6 11.6 0 0 1 3.62-3A11.35 11.35 0 0 1 56.58 22a12.67 12.67 0 0 1 5.33 1 10.13 10.13 0 0 1 3.68 2.83 12.56 12.56 0 0 1 2.24 4.26 19.79 19.79 0 0 1 .88 5.21c0 .64.06 1.31.06 2s0 1.34-.06 2a18.1 18.1 0 0 1-.82 5.16 13.14 13.14 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.56 12.56 0 0 1-5.36 1.05 11.36 11.36 0 0 1-5.36-1.16 10.55 10.55 0 0 1-3.54-3v13a1.27 1.27 0 0 1-.37.94 1.38 1.38 0 0 1-1 .37ZM55 47.3a6.63 6.63 0 0 0 4.17-1.16 6.53 6.53 0 0 0 2.18-3 14.43 14.43 0 0 0 .8-4.14 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.8-4.14 6.58 6.58 0 0 0-2.18-3A6.69 6.69 0 0 0 55 27.35a6.44 6.44 0 0 0-6.49 4.22 12.43 12.43 0 0 0-.82 3.77q-.06 1-.06 2.16c0 .79 0 1.53.06 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86A6.83 6.83 0 0 0 55 47.3ZM75.71 62.84a1.27 1.27 0 0 1-1.3-1.31V23.89a1.25 1.25 0 0 1 1.3-1.3h3.58a1.29 1.29 0 0 1 .93.36 1.27 1.27 0 0 1 .37.94v2.38a11.53 11.53 0 0 1 3.63-3A11.29 11.29 0 0 1 89.77 22a12.64 12.64 0 0 1 5.33 1 10.16 10.16 0 0 1 3.69 2.83 12.74 12.74 0 0 1 2.21 4.3 20.21 20.21 0 0 1 .88 5.21v4a18.1 18.1 0 0 1-.83 5.16 12.94 12.94 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.53 12.53 0 0 1-5.36 1.05 11.31 11.31 0 0 1-5.35-1.16 10.49 10.49 0 0 1-3.55-3v13a1.27 1.27 0 0 1-.37.94 1.34 1.34 0 0 1-1 .37ZM88.19 47.3a6.1 6.1 0 0 0 6.35-4.19 14.43 14.43 0 0 0 .79-4.11 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.79-4.14 6.1 6.1 0 0 0-6.35-4.19 6.44 6.44 0 0 0-6.5 4.22 12.74 12.74 0 0 0-.82 3.77c0 .64-.05 1.36-.05 2.16s0 1.53.05 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86 6.84 6.84 0 0 0 4.09 1.1ZM122.17 52.63a21.18 21.18 0 0 1-8.56-1.53 12.82 12.82 0 0 1-5.27-4 9.44 9.44 0 0 1-1.93-5.25 1.1 1.1 0 0 1 .34-.79 1.15 1.15 0 0 1 .85-.34h4a1.47 1.47 0 0 1 1 .31 2.75 2.75 0 0 1 .57.76 6.36 6.36 0 0 0 1.36 2.39 7.72 7.72 0 0 0 2.86 2 12.06 12.06 0 0 0 4.73.79q4.48 0 6.61-1.53a4.88 4.88 0 0 0 2.12-4.19 3.83 3.83 0 0 0-1.13-2.87 10.56 10.56 0 0 0-3.52-2c-1.58-.6-3.64-1.25-6.17-1.93a36.52 36.52 0 0 1-7-2.55 10.29 10.29 0 0 1-4.19-3.57 9.81 9.81 0 0 1-1.39-5.44 9.72 9.72 0 0 1 1.73-5.67 11.66 11.66 0 0 1 4.93-3.94 18.66 18.66 0 0 1 7.68-1.45 19 19 0 0 1 6.35 1 14 14 0 0 1 4.57 2.55 11.53 11.53 0 0 1 2.77 3.4 8.31 8.31 0 0 1 1 3.57 1.18 1.18 0 0 1-.32.77 1.09 1.09 0 0 1-.87.37h-4.14a1.83 1.83 0 0 1-.88-.23 1.5 1.5 0 0 1-.65-.85 5.22 5.22 0 0 0-2.44-3.46 9.49 9.49 0 0 0-5.39-1.42 10.19 10.19 0 0 0-5.41 1.28 4.35 4.35 0 0 0-2.07 4 4.24 4.24 0 0 0 1 2.89 8.38 8.38 0 0 0 3.18 2 58.53 58.53 0 0 0 5.75 1.9 43.26 43.26 0 0 1 7.76 2.54 10.38 10.38 0 0 1 4.4 3.51 9.64 9.64 0 0 1 1.41 5.42 10 10 0 0 1-1.95 6.2 12.32 12.32 0 0 1-5.44 4 22 22 0 0 1-8.25 1.36ZM143.77 17.37a1.34 1.34 0 0 1-1-.37 1.24 1.24 0 0 1-.37-.93v-3.58a1.34 1.34 0 0 1 .37-1 1.32 1.32 0 0 1 1-.4h4.31a1.39 1.39 0 0 1 1 .4 1.29 1.29 0 0 1 .4 1v3.58a1.2 1.2 0 0 1-.4.93 1.41 1.41 0 0 1-1 .37Zm.34 34.7a1.38 1.38 0 0 1-1-.37 1.27 1.27 0 0 1-.37-.94V23.89a1.27 1.27 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.69a1.25 1.25 0 0 1 1.3 1.3v26.87a1.27 1.27 0 0 1-.37.94 1.28 1.28 0 0 1-.93.37ZM168.5 64.54a17.5 17.5 0 0 1-6.58-1.05 12.16 12.16 0 0 1-4-2.52 9.27 9.27 0 0 1-2.09-2.97 8.1 8.1 0 0 1-.65-2.38 1.13 1.13 0 0 1 .34-1 1.3 1.3 0 0 1 1-.39h3.86a1.51 1.51 0 0 1 .85.22 1.8 1.8 0 0 1 .56 1 11.19 11.19 0 0 0 1 1.73 5 5 0 0 0 1.93 1.61 7.69 7.69 0 0 0 3.57.68 11 11 0 0 0 4.05-.65 4.82 4.82 0 0 0 2.5-2.3 9.59 9.59 0 0 0 .87-4.47v-3.84a10.93 10.93 0 0 1-3.64 2.79 11.93 11.93 0 0 1-5.38 1.08 12.69 12.69 0 0 1-5.36-1 9.78 9.78 0 0 1-3.69-2.86 13.36 13.36 0 0 1-2.21-4.28 18.82 18.82 0 0 1-.82-5.27q-.06-1.53 0-3.12a18.94 18.94 0 0 1 .8-5.16 12.85 12.85 0 0 1 2.21-4.39 10.34 10.34 0 0 1 3.71-2.94 12.23 12.23 0 0 1 5.36-1.06 11.1 11.1 0 0 1 5.52 1.25 11.77 11.77 0 0 1 3.66 3.06V24a1.37 1.37 0 0 1 .37-1 1.31 1.31 0 0 1 1-.39h3.57a1.33 1.33 0 0 1 1.35 1.39v27.39a16.14 16.14 0 0 1-1.38 6.91 10 10 0 0 1-4.4 4.59 16.32 16.32 0 0 1-7.88 1.65Zm-.17-17.69a6.62 6.62 0 0 0 4.11-1.19 7.39 7.39 0 0 0 2.33-3 10.87 10.87 0 0 0 .87-3.71c0-.49.06-1.12.06-1.9s0-1.39-.06-1.84a11.09 11.09 0 0 0-.87-3.74 7.13 7.13 0 0 0-2.33-3 6.74 6.74 0 0 0-4.11-1.16 6.85 6.85 0 0 0-4.17 1.16 6.49 6.49 0 0 0-2.24 3 14.43 14.43 0 0 0-.79 4.14v2.84a14.62 14.62 0 0 0 .79 4.11 6.52 6.52 0 0 0 2.24 3.06 6.85 6.85 0 0 0 4.17 1.23ZM190.13 52.07a1.38 1.38 0 0 1-1-.37 1.31 1.31 0 0 1-.37-.94V23.89a1.31 1.31 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.63a1.25 1.25 0 0 1 1.31 1.3v2.44a12.29 12.29 0 0 1 3.8-3.09 11.91 11.91 0 0 1 5.72-1.24 11.34 11.34 0 0 1 6.12 1.59 10.28 10.28 0 0 1 3.92 4.41 15.55 15.55 0 0 1 1.37 6.77v16a1.25 1.25 0 0 1-.4.94 1.39 1.39 0 0 1-1 .37h-3.92a1.28 1.28 0 0 1-.93-.37 1.27 1.27 0 0 1-.37-.94V35.06a8.33 8.33 0 0 0-1.79-5.67 6.45 6.45 0 0 0-5.13-2 6.84 6.84 0 0 0-5.18 2 7.83 7.83 0 0 0-2 5.67v15.7a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37ZM230.92 52.63a11.76 11.76 0 0 1-5.25-1.16 9.93 9.93 0 0 1-3.74-3.09 7.31 7.31 0 0 1-1.39-4.38 7.42 7.42 0 0 1 3.18-6.27 18.1 18.1 0 0 1 8.39-3.09l8-1.19v-1.4a5.5 5.5 0 0 0-1.36-4c-.91-.94-2.42-1.41-4.54-1.41a6.9 6.9 0 0 0-3.74.9 5.22 5.22 0 0 0-2 2.44 1.32 1.32 0 0 1-1.25.74h-3.51a1.2 1.2 0 0 1-.94-.34 1.34 1.34 0 0 1-.31-.91 5.88 5.88 0 0 1 .71-2.12 8.28 8.28 0 0 1 2.07-2.5 11.76 11.76 0 0 1 3.66-2 15.47 15.47 0 0 1 5.35-.82 17.06 17.06 0 0 1 5.9.88 9.93 9.93 0 0 1 3.8 2.35 9.17 9.17 0 0 1 2.07 3.4 12.46 12.46 0 0 1 .65 4v18.1a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37h-3.63a1.25 1.25 0 0 1-1.3-1.31v-2.38a9.3 9.3 0 0 1-2 2 10.74 10.74 0 0 1-3 1.62 13.85 13.85 0 0 1-4.42.63Zm1.59-4.82a8.24 8.24 0 0 0 3.91-.93A6.74 6.74 0 0 0 239.2 44a10.38 10.38 0 0 0 1-4.88v-1.4l-6.13 1a13.25 13.25 0 0 0-5.52 1.75 3.66 3.66 0 0 0-1.85 3.06 3.46 3.46 0 0 0 .85 2.41 5.33 5.33 0 0 0 2.16 1.42 8 8 0 0 0 2.8.45ZM254.47 52.07a1.25 1.25 0 0 1-1.3-1.31V13.12a1.25 1.25 0 0 1 1.3-1.31h3.74a1.25 1.25 0 0 1 1.3 1.31v37.64a1.25 1.25 0 0 1-1.3 1.31Z"></path></g></svg></div><ul><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a class="no-underline hover:underline" href="/terms">Terms & Conditions</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a class="no-underline hover:underline" href="/privacy-policy">Privacy Policy</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a class="no-underline hover:underline" href="/cookie-policy">Cookie Policy</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://docs.appsignal.com/appsignal/gdpr.html" class="no-underline hover:underline">GDPR compliance</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a class="no-underline hover:underline" href="/contact">Contact us / Imprint</a></li></ul></div></div></div></footer><!--/$--></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"filterBy":"","initialPosts":[{"title":"Elixir package v2.15.0","category":"Elixir","version":"2.15.0","body":{"code":"var Component=(()=\u003e{var h=Object.create;var o=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var x=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),u=(n,e)=\u003e{for(var i in e)o(n,i,{get:e[i],enumerable:!0})},c=(n,e,i,r)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let a of d(e))!m.call(n,a)\u0026\u0026a!==i\u0026\u0026o(n,a,{get:()=\u003ee[a],enumerable:!(r=p(e,a))||r.enumerable});return n};var f=(n,e,i)=\u003e(i=n!=null?h(g(n)):{},c(e||!n||!n.__esModule?o(i,\"default\",{value:n,enumerable:!0}):i,n)),j=n=\u003ec(o({},\"__esModule\",{value:!0}),n);var s=x((k,l)=\u003e{l.exports=_jsx_runtime});var C={};u(C,{default:()=\u003ew,frontmatter:()=\u003e_});var t=f(s()),_={title:\"Elixir package v2.15.0\",category:\"Elixir\",version:\"2.15.0\"};function b(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(i,{})})):i();function i(){let r=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(r.ul,{children:[`\n`,(0,t.jsx)(r.li,{children:\"Switch Hackney to Finch as the bundled HTTP client to operate within the integration\"}),`\n`]}),`\n`,(0,t.jsxs)(r.p,{children:[\"View the \",(0,t.jsx)(r.a,{href:\"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2150\",children:\"Elixir package v2.15.0 changelog\"}),\" for more information.\"]})]})}}var w=b;return j(C);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-elixir-2.15.0","categorySlug":"elixir","sitemapSlug":"changelog/elixir/2025-03-14-elixir-2.15.0","idAttribute":"elixir-package-v2150","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--purple"},{"title":"Improve SQL sanitisation","category":"Elixir","version":"2.15.1","body":{"code":"var Component=(()=\u003e{var h=Object.create;var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var u=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),x=(n,e)=\u003e{for(var i in e)a(n,i,{get:e[i],enumerable:!0})},s=(n,e,i,r)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let o of p(e))!g.call(n,o)\u0026\u0026o!==i\u0026\u0026a(n,o,{get:()=\u003ee[o],enumerable:!(r=m(e,o))||r.enumerable});return n};var f=(n,e,i)=\u003e(i=n!=null?h(d(n)):{},s(e||!n||!n.__esModule?a(i,\"default\",{value:n,enumerable:!0}):i,n)),j=n=\u003es(a({},\"__esModule\",{value:!0}),n);var l=u((E,c)=\u003e{c.exports=_jsx_runtime});var C={};x(C,{default:()=\u003ev,frontmatter:()=\u003e_});var t=f(l()),_={title:\"Improve SQL sanitisation\",category:\"Elixir\",version:\"2.15.1\"};function b(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(i,{})})):i();function i(){let r=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(r.ul,{children:[`\n`,(0,t.jsx)(r.li,{children:\"Improve SQL sanitisation for functions and numbered placeholders.\"}),`\n`]}),`\n`,(0,t.jsxs)(r.p,{children:[\"View the \",(0,t.jsx)(r.a,{href:\"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2151\",children:\"Elixir package v2.15.1 changelog\"}),\" for more information.\"]})]})}}var v=b;return j(C);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-elixir-2.15.1","categorySlug":"elixir","sitemapSlug":"changelog/elixir/2025-03-14-elixir-2.15.1","idAttribute":"improve-sql-sanitisation","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--purple"},{"title":"Improve SQL sanitisation","category":"Node.js","version":"3.6.3","body":{"code":"var Component=(()=\u003e{var d=Object.create;var r=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var u=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),f=(n,e)=\u003e{for(var o in e)r(n,o,{get:e[o],enumerable:!0})},s=(n,e,o,a)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let i of m(e))!g.call(n,i)\u0026\u0026i!==o\u0026\u0026r(n,i,{get:()=\u003ee[i],enumerable:!(a=h(e,i))||a.enumerable});return n};var j=(n,e,o)=\u003e(o=n!=null?d(p(n)):{},s(e||!n||!n.__esModule?r(o,\"default\",{value:n,enumerable:!0}):o,n)),x=n=\u003es(r({},\"__esModule\",{value:!0}),n);var l=u((M,c)=\u003e{c.exports=_jsx_runtime});var C={};f(C,{default:()=\u003ev,frontmatter:()=\u003e_});var t=j(l()),_={title:\"Improve SQL sanitisation\",category:\"Node.js\",version:\"3.6.3\"};function b(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(o,{})})):o();function o(){let a=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(a.ul,{children:[`\n`,(0,t.jsx)(a.li,{children:\"Improve SQL sanitisation for functions and numbered placeholders.\"}),`\n`]}),`\n`,(0,t.jsxs)(a.p,{children:[\"View the \",(0,t.jsx)(a.a,{href:\"https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#363\",children:\"Node.js package v3.6.3 changelog\"}),\" for more information.\"]})]})}}var v=b;return x(C);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-node.js-3.6.3","categorySlug":"nodejs","sitemapSlug":"changelog/nodejs/2025-03-14-node.js-3.6.3","idAttribute":"improve-sql-sanitisation","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--green"},{"title":"Improve SQL sanitisation","category":"Python","version":"1.5.1","body":{"code":"var Component=(()=\u003e{var l=Object.create;var r=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var u=(n,t)=\u003e()=\u003e(t||n((t={exports:{}}).exports,t),t.exports),f=(n,t)=\u003e{for(var o in t)r(n,o,{get:t[o],enumerable:!0})},s=(n,t,o,a)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let i of m(t))!g.call(n,i)\u0026\u0026i!==o\u0026\u0026r(n,i,{get:()=\u003et[i],enumerable:!(a=p(t,i))||a.enumerable});return n};var x=(n,t,o)=\u003e(o=n!=null?l(d(n)):{},s(t||!n||!n.__esModule?r(o,\"default\",{value:n,enumerable:!0}):o,n)),j=n=\u003es(r({},\"__esModule\",{value:!0}),n);var h=u((L,c)=\u003e{c.exports=_jsx_runtime});var v={};f(v,{default:()=\u003ey,frontmatter:()=\u003e_});var e=x(h()),_={title:\"Improve SQL sanitisation\",category:\"Python\",version:\"1.5.1\"};function b(n={}){let{wrapper:t}=n.components||{};return t?(0,e.jsx)(t,Object.assign({},n,{children:(0,e.jsx)(o,{})})):o();function o(){let a=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(a.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,e.jsxs)(a.ul,{children:[`\n`,(0,e.jsx)(a.li,{children:\"Improve SQL sanitisation for functions and numbered placeholders.\"}),`\n`]}),`\n`,(0,e.jsxs)(a.p,{children:[\"View the \",(0,e.jsx)(a.a,{href:\"https://github.com/appsignal/appsignal-python/blob/main/CHANGELOG.md#151\",children:\"Python package v1.5.1 changelog\"}),\" for more information.\"]})]})}}var y=b;return j(v);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-python-1.5.1","categorySlug":"python","sitemapSlug":"changelog/python/2025-03-14-python-1.5.1","idAttribute":"improve-sql-sanitisation","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--blue"},{"title":"Improve SQL sanitisation","category":"Ruby","version":"4.5.5","body":{"code":"var Component=(()=\u003e{var h=Object.create;var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var g=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),f=(n,e)=\u003e{for(var o in e)a(n,o,{get:e[o],enumerable:!0})},s=(n,e,o,r)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let i of d(e))!u.call(n,i)\u0026\u0026i!==o\u0026\u0026a(n,i,{get:()=\u003ee[i],enumerable:!(r=m(e,i))||r.enumerable});return n};var b=(n,e,o)=\u003e(o=n!=null?h(p(n)):{},s(e||!n||!n.__esModule?a(o,\"default\",{value:n,enumerable:!0}):o,n)),x=n=\u003es(a({},\"__esModule\",{value:!0}),n);var l=g((L,c)=\u003e{c.exports=_jsx_runtime});var v={};f(v,{default:()=\u003ey,frontmatter:()=\u003ej});var t=b(l()),j={title:\"Improve SQL sanitisation\",category:\"Ruby\",version:\"4.5.5\"};function _(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(o,{})})):o();function o(){let r=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(r.ul,{children:[`\n`,(0,t.jsx)(r.li,{children:\"Improve SQL sanitisation for functions and numbered placeholders.\"}),`\n`]}),`\n`,(0,t.jsxs)(r.p,{children:[\"View the \",(0,t.jsx)(r.a,{href:\"https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#455\",children:\"Ruby gem v4.5.5 changelog\"}),\" for more information.\"]})]})}}var y=_;return x(v);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-ruby-4.5.5","categorySlug":"ruby","sitemapSlug":"changelog/ruby/2025-03-14-ruby-4.5.5","idAttribute":"improve-sql-sanitisation","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--red"},{"title":"Improve SQL sanitisation","category":"Standalone Agent","version":"0.36.2","body":{"code":"var Component=(()=\u003e{var d=Object.create;var r=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var u=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),x=(n,e)=\u003e{for(var a in e)r(n,a,{get:e[a],enumerable:!0})},i=(n,e,a,s)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let o of p(e))!m.call(n,o)\u0026\u0026o!==a\u0026\u0026r(n,o,{get:()=\u003ee[o],enumerable:!(s=h(e,o))||s.enumerable});return n};var f=(n,e,a)=\u003e(a=n!=null?d(g(n)):{},i(e||!n||!n.__esModule?r(a,\"default\",{value:n,enumerable:!0}):a,n)),j=n=\u003ei(r({},\"__esModule\",{value:!0}),n);var l=u((D,c)=\u003e{c.exports=_jsx_runtime});var v={};x(v,{default:()=\u003ek,frontmatter:()=\u003e_});var t=f(l()),_={title:\"Improve SQL sanitisation\",category:\"Standalone Agent\",version:\"0.36.2\"};function b(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(a,{})})):a();function a(){let s=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(s.ul,{children:[`\n`,(0,t.jsx)(s.li,{children:\"Improve SQL sanitisation for functions and numbered placeholders.\"}),`\n`]}),`\n`,(0,t.jsxs)(s.p,{children:[\"This release can be installed through \",(0,t.jsx)(s.a,{href:\"https://docs.appsignal.com/standalone-agent/installation/linux-package.html\",children:\"our standalone agent packages\"}),\" and as a \",(0,t.jsx)(s.a,{href:\"https://hub.docker.com/r/appsignal/agent\",children:\"Docker image\"}),\".\"]})]})}}var k=b;return j(v);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-14-standalone-agent-0.36.2","categorySlug":"standalone-agent","sitemapSlug":"changelog/standalone-agent/2025-03-14-standalone-agent-0.36.2","idAttribute":"improve-sql-sanitisation","date":"2025-03-14T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Update error incident generation","category":"Collector","version":"0.5.0","body":{"code":"var Component=(()=\u003e{var s=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(i,t)=\u003e()=\u003e(t||i((t={exports:{}}).exports,t),t.exports),x=(i,t)=\u003e{for(var r in t)a(i,r,{get:t[r],enumerable:!0})},l=(i,t,r,e)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let o of p(t))!g.call(i,o)\u0026\u0026o!==r\u0026\u0026a(i,o,{get:()=\u003et[o],enumerable:!(e=h(t,o))||e.enumerable});return i};var f=(i,t,r)=\u003e(r=i!=null?s(u(i)):{},l(t||!i||!i.__esModule?a(r,\"default\",{value:i,enumerable:!0}):r,i)),b=i=\u003el(a({},\"__esModule\",{value:!0}),i);var d=m((C,c)=\u003e{c.exports=_jsx_runtime});var _={};x(_,{default:()=\u003ev,frontmatter:()=\u003ew});var n=f(d()),w={title:\"Update error incident generation\",category:\"Collector\",version:\"0.5.0\"};function j(i={}){let{wrapper:t}=i.components||{};return t?(0,n.jsx)(t,Object.assign({},i,{children:(0,n.jsx)(r,{})})):r();function r(){let e=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",code:\"code\",a:\"a\"},i.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,n.jsxs)(e.ul,{children:[`\n`,(0,n.jsx)(e.li,{children:\"Update our support OpenTelemetry Semantic Conventions for code attributes used in unique span detection.\"}),`\n`]}),`\n`,(0,n.jsx)(e.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,n.jsxs)(e.ul,{children:[`\n`,(0,n.jsxs)(e.li,{children:[`\n`,(0,n.jsx)(e.p,{children:\"The shutdown behavior on internal errors is improved, and now logs what crashed and why.\"}),`\n`]}),`\n`,(0,n.jsxs)(e.li,{children:[`\n`,(0,n.jsxs)(e.p,{children:[\"Limit \",(0,n.jsx)(e.code,{children:\"appsignal.tag.\u003ckey\u003e\"}),\" tag values to 256 characters.\"]}),`\n`]}),`\n`,(0,n.jsxs)(e.li,{children:[`\n`,(0,n.jsx)(e.p,{children:\"Rename an internal span event attribute for metadata distributions. Older collectors will no longer report metadata distributions for error incidents.\"}),`\n`,(0,n.jsx)(e.p,{children:\"This will create new incidents for existing errors. This is intentional.\"}),`\n`]}),`\n`]}),`\n`,(0,n.jsx)(e.h2,{id:\"fixed\",children:\"Fixed\"}),`\n`,(0,n.jsxs)(e.ul,{children:[`\n`,(0,n.jsx)(e.li,{children:\"Fix a crash on truncating Unicode values.\"}),`\n`]}),`\n`,(0,n.jsxs)(e.p,{children:[\"This release can be installed through \",(0,n.jsx)(e.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var v=j;return b(_);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-13-collector-0.5.0","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-13-collector-0.5.0","idAttribute":"update-error-incident-generation","date":"2025-03-13T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Configuration via request headers","category":"Collector","version":"0.4.4","body":{"code":"var Component=(()=\u003e{var c=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(e,t)=\u003e()=\u003e(t||e((t={exports:{}}).exports,t),t.exports),f=(e,t)=\u003e{for(var i in t)a(e,i,{get:t[i],enumerable:!0})},s=(e,t,i,r)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let o of d(t))!g.call(e,o)\u0026\u0026o!==i\u0026\u0026a(e,o,{get:()=\u003et[o],enumerable:!(r=h(t,o))||r.enumerable});return e};var x=(e,t,i)=\u003e(i=e!=null?c(u(e)):{},s(t||!e||!e.__esModule?a(i,\"default\",{value:e,enumerable:!0}):i,e)),v=e=\u003es(a({},\"__esModule\",{value:!0}),e);var l=m((S,p)=\u003e{p.exports=_jsx_runtime});var y={};f(y,{default:()=\u003eT,frontmatter:()=\u003eq});var n=x(l()),q={title:\"Configuration via request headers\",category:\"Collector\",version:\"0.4.4\"};function C(e={}){let{wrapper:t}=e.components||{};return t?(0,n.jsx)(t,Object.assign({},e,{children:(0,n.jsx)(i,{})})):i();function i(){let r=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,n.jsxs)(r.ul,{children:[`\n`,(0,n.jsxs)(r.li,{children:[`\n`,(0,n.jsx)(r.p,{children:\"Configure AppSignal via HTTP request headers on export requests. If it's not possible to configure resource attributes in OpenTelemetry export data, configure AppSignal via request headers set on the export requests made to the collector's HTTP endpoints.\"}),`\n`,(0,n.jsx)(r.p,{children:\"Supported headers are:\"}),`\n`,(0,n.jsx)(r.p,{children:`AppSignal-Config-Name: app name (required)\nAppSignal-Config-Environment: app environment (required)\nAppSignal-Config-PushApiKey: push API key (required)\nAppSignal-Config-Revision: app revision (required)\nAppSignal-Config-LanguageIntegration: language integration like ruby, elixir, php, etc. (required)\nOpenTelemetry-ServiceName: service name of the app\nOpenTelemetry-HostName: name of the app's host (required)`}),`\n`,(0,n.jsxs)(r.p,{children:[\"For more information, see our \",(0,n.jsx)(r.a,{href:\"https://docs.appsignal.com/opentelemetry/configuration/options.html\",children:\"configuration documentation\"}),\".\"]}),`\n`]}),`\n`]}),`\n`,(0,n.jsx)(r.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,n.jsxs)(r.ul,{children:[`\n`,(0,n.jsx)(r.li,{children:\"Close HTTP connections from OpenTelemetry exports when we have successfully received the request. This fixes an issue with the server not shutting down when the connection is kept open.\"}),`\n`]}),`\n`,(0,n.jsxs)(r.p,{children:[\"This release can be installed through \",(0,n.jsx)(r.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var T=C;return v(y);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-11-collector-0.4.4","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-11-collector-0.4.4","idAttribute":"configuration-via-request-headers","date":"2025-03-11T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Delay agent reboots","category":"Elixir","version":"2.14.1","body":{"code":"var Component=(()=\u003e{var c=Object.create;var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var u=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),b=(e,n)=\u003e{for(var i in n)s(e,i,{get:n[i],enumerable:!0})},r=(e,n,i,o)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let a of p(n))!m.call(e,a)\u0026\u0026a!==i\u0026\u0026s(e,a,{get:()=\u003en[a],enumerable:!(o=g(n,a))||o.enumerable});return e};var f=(e,n,i)=\u003e(i=e!=null?c(d(e)):{},r(n||!e||!e.__esModule?s(i,\"default\",{value:e,enumerable:!0}):i,e)),x=e=\u003er(s({},\"__esModule\",{value:!0}),e);var h=u((k,l)=\u003e{l.exports=_jsx_runtime});var _={};b(_,{default:()=\u003ej,frontmatter:()=\u003ey});var t=f(h()),y={title:\"Delay agent reboots\",category:\"Elixir\",version:\"2.14.1\"};function w(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(i,{})})):i();function i(){let o=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(o.ul,{children:[`\n`,(0,t.jsxs)(o.li,{children:[`\n`,(0,t.jsx)(o.p,{children:\"Delay and eventually halt agent reboots by the extension.\"}),`\n`,(0,t.jsx)(o.p,{children:\"The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.\"}),`\n`,(0,t.jsx)(o.p,{children:\"In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.\"}),`\n`,(0,t.jsx)(o.p,{children:\"This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.\"}),`\n`]}),`\n`]}),`\n`,(0,t.jsxs)(o.p,{children:[\"View the \",(0,t.jsx)(o.a,{href:\"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2141\",children:\"Elixir package v2.14.1 changelog\"}),\" for more information.\"]})]})}}var j=w;return x(_);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-11-elixir-2.14.1","categorySlug":"elixir","sitemapSlug":"changelog/elixir/2025-03-11-elixir-2.14.1","idAttribute":"delay-agent-reboots","date":"2025-03-11T00:00:00+00:00","year":"2025","style":"c-pill--purple"},{"title":"Delay agent reboots","category":"Node.js","version":"3.6.2","body":{"code":"var Component=(()=\u003e{var c=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var u=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),b=(e,n)=\u003e{for(var i in n)s(e,i,{get:n[i],enumerable:!0})},r=(e,n,i,o)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let a of g(n))!m.call(e,a)\u0026\u0026a!==i\u0026\u0026s(e,a,{get:()=\u003en[a],enumerable:!(o=d(n,a))||o.enumerable});return e};var f=(e,n,i)=\u003e(i=e!=null?c(p(e)):{},r(n||!e||!e.__esModule?s(i,\"default\",{value:e,enumerable:!0}):i,e)),x=e=\u003er(s({},\"__esModule\",{value:!0}),e);var h=u((k,l)=\u003e{l.exports=_jsx_runtime});var _={};b(_,{default:()=\u003ew,frontmatter:()=\u003ey});var t=f(h()),y={title:\"Delay agent reboots\",category:\"Node.js\",version:\"3.6.2\"};function j(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(i,{})})):i();function i(){let o=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(o.ul,{children:[`\n`,(0,t.jsxs)(o.li,{children:[`\n`,(0,t.jsx)(o.p,{children:\"Delay and eventually halt agent reboots by the extension.\"}),`\n`,(0,t.jsx)(o.p,{children:\"The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.\"}),`\n`,(0,t.jsx)(o.p,{children:\"In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.\"}),`\n`,(0,t.jsx)(o.p,{children:\"This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.\"}),`\n`]}),`\n`]}),`\n`,(0,t.jsxs)(o.p,{children:[\"View the \",(0,t.jsx)(o.a,{href:\"https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#362\",children:\"Node.js package v3.6.2 changelog\"}),\" for more information.\"]})]})}}var w=j;return x(_);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-11-node.js-3.6.2","categorySlug":"nodejs","sitemapSlug":"changelog/nodejs/2025-03-11-node.js-3.6.2","idAttribute":"delay-agent-reboots","date":"2025-03-11T00:00:00+00:00","year":"2025","style":"c-pill--green"},{"title":"Delay agent reboots","category":"Ruby","version":"4.5.4","body":{"code":"var Component=(()=\u003e{var c=Object.create;var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var m=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),b=(e,n)=\u003e{for(var i in n)s(e,i,{get:n[i],enumerable:!0})},r=(e,n,i,o)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let a of p(n))!u.call(e,a)\u0026\u0026a!==i\u0026\u0026s(e,a,{get:()=\u003en[a],enumerable:!(o=g(n,a))||o.enumerable});return e};var f=(e,n,i)=\u003e(i=e!=null?c(d(e)):{},r(n||!e||!e.__esModule?s(i,\"default\",{value:e,enumerable:!0}):i,e)),y=e=\u003er(s({},\"__esModule\",{value:!0}),e);var h=m((A,l)=\u003e{l.exports=_jsx_runtime});var _={};b(_,{default:()=\u003ej,frontmatter:()=\u003ex});var t=f(h()),x={title:\"Delay agent reboots\",category:\"Ruby\",version:\"4.5.4\"};function w(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(i,{})})):i();function i(){let o=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(o.ul,{children:[`\n`,(0,t.jsxs)(o.li,{children:[`\n`,(0,t.jsx)(o.p,{children:\"Delay and eventually halt agent reboots by the extension.\"}),`\n`,(0,t.jsx)(o.p,{children:\"The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.\"}),`\n`,(0,t.jsx)(o.p,{children:\"In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.\"}),`\n`,(0,t.jsx)(o.p,{children:\"This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.\"}),`\n`]}),`\n`]}),`\n`,(0,t.jsxs)(o.p,{children:[\"View the \",(0,t.jsx)(o.a,{href:\"https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#454\",children:\"Ruby gem v4.5.4 changelog\"}),\" for more information.\"]})]})}}var j=w;return y(_);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-11-ruby-4.5.4","categorySlug":"ruby","sitemapSlug":"changelog/ruby/2025-03-11-ruby-4.5.4","idAttribute":"delay-agent-reboots","date":"2025-03-11T00:00:00+00:00","year":"2025","style":"c-pill--red"},{"title":"Ignore empty environment variables for config options","category":"Collector","version":"0.4.2","body":{"code":"var Component=(()=\u003e{var h=Object.create;var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var m=(i,r)=\u003e()=\u003e(r||i((r={exports:{}}).exports,r),r.exports),A=(i,r)=\u003e{for(var t in r)o(i,t,{get:r[t],enumerable:!0})},c=(i,r,t,n)=\u003e{if(r\u0026\u0026typeof r==\"object\"||typeof r==\"function\")for(let l of P(r))!_.call(i,l)\u0026\u0026l!==t\u0026\u0026o(i,l,{get:()=\u003er[l],enumerable:!(n=s(r,l))||n.enumerable});return i};var T=(i,r,t)=\u003e(t=i!=null?h(p(i)):{},c(r||!i||!i.__esModule?o(t,\"default\",{value:i,enumerable:!0}):t,i)),g=i=\u003ec(o({},\"__esModule\",{value:!0}),i);var a=m((L,d)=\u003e{d.exports=_jsx_runtime});var N={};A(N,{default:()=\u003ef,frontmatter:()=\u003eI});var e=T(a()),I={title:\"Ignore empty environment variables for config options\",category:\"Collector\",version:\"0.4.2\"};function u(i={}){let{wrapper:r}=i.components||{};return r?(0,e.jsx)(r,Object.assign({},i,{children:(0,e.jsx)(t,{})})):t();function t(){let n=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",code:\"code\",p:\"p\",pre:\"pre\",a:\"a\"},i.components);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(n.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,e.jsxs)(n.ul,{children:[`\n`,(0,e.jsxs)(n.li,{children:[\"Add the \",(0,e.jsx)(n.code,{children:\"appsignal.config.otp_app\"}),\" resource attribute config option. When set for Elixir applications, we will use the OTP app name to detect which stacktrace lines originate from the app, and which lines are from dependencies.\"]}),`\n`]}),`\n`,(0,e.jsx)(n.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,e.jsxs)(n.ul,{children:[`\n`,(0,e.jsxs)(n.li,{children:[`\n`,(0,e.jsx)(n.p,{children:\"Consider empty environment variables as unset. From now on, an environment variable that's set to an empty string is considered unset when reading the collector configuration from system environment variables.\"}),`\n`,(0,e.jsx)(n.p,{children:`In the example below, the environment variable will be considered unset.\nIt will not fail on parsing an empty string as a number and set the default HTTP port instead.`}),`\n`,(0,e.jsx)(n.pre,{\"data-raw\":`APPSIGNAL_HTTP_PORT=\"\"\n`,children:(0,e.jsx)(n.code,{children:`APPSIGNAL_HTTP_PORT=\"\"\n`})}),`\n`,(0,e.jsx)(n.p,{children:\"This behavior is changed for the following config options:\"}),`\n`,(0,e.jsxs)(n.ul,{children:[`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_CPU_COUNT\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_ENABLE_HOST_METRICS\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_FILES_WORLD_ACCESSIBLE\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_HOSTNAME\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_HTTP_PORT\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_LOG_LEVEL\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_PUSH_API_ENDPOINT\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_PUSH_API_KEY\"})}),`\n`,(0,e.jsx)(n.li,{children:(0,e.jsx)(n.code,{children:\"APPSIGNAL_RUNNING_IN_CONTAINER\"})}),`\n`]}),`\n`]}),`\n`,(0,e.jsxs)(n.li,{children:[`\n`,(0,e.jsxs)(n.p,{children:[\"In the \",(0,e.jsx)(n.code,{children:\"appsignal/collector\"}),\" Docker image we will now listen to the \",(0,e.jsx)(n.code,{children:\"PORT\"}),\" environment variable if it's set, and use it to configure the HTTP server's port.\"]}),`\n`,(0,e.jsxs)(n.p,{children:[\"If the \",(0,e.jsx)(n.code,{children:\"APPSIGNAL_HTTP_PORT\"}),\" environment variable is also set in addition to the \",(0,e.jsx)(n.code,{children:\"PORT\"}),\" environment variable, it will read from the \",(0,e.jsx)(n.code,{children:\"APPSIGNAL_HTTP_PORT\"}),\" environment variable.\"]}),`\n`]}),`\n`]}),`\n`,(0,e.jsxs)(n.p,{children:[\"This release can be installed through \",(0,e.jsx)(n.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var f=u;return g(N);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-06-collector-0.4.2","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-06-collector-0.4.2","idAttribute":"ignore-empty-environment-variables-for-config-options","date":"2025-03-06T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Support gzipped payloads","category":"Collector","version":"0.4.3","body":{"code":"var Component=(()=\u003e{var d=Object.create;var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),f=(e,n)=\u003e{for(var o in n)a(e,o,{get:n[o],enumerable:!0})},i=(e,n,o,c)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let r of h(n))!m.call(e,r)\u0026\u0026r!==o\u0026\u0026a(e,r,{get:()=\u003en[r],enumerable:!(c=p(n,r))||c.enumerable});return e};var x=(e,n,o)=\u003e(o=e!=null?d(u(e)):{},i(n||!e||!e.__esModule?a(o,\"default\",{value:e,enumerable:!0}):o,e)),j=e=\u003ei(a({},\"__esModule\",{value:!0}),e);var s=g((M,l)=\u003e{l.exports=_jsx_runtime});var b={};f(b,{default:()=\u003eC,frontmatter:()=\u003e_});var t=x(s()),_={title:\"Support gzipped payloads\",category:\"Collector\",version:\"0.4.3\"};function y(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(o,{})})):o();function o(){let c=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",code:\"code\",p:\"p\",a:\"a\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,t.jsxs)(c.ul,{children:[`\n`,(0,t.jsxs)(c.li,{children:[\"Gzipped payloads for the collector requests are now accepted if specified in the \",(0,t.jsx)(c.code,{children:\"Content-Encoding\"}),\" header.\"]}),`\n`]}),`\n`,(0,t.jsxs)(c.p,{children:[\"This release can be installed through \",(0,t.jsx)(c.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var C=y;return j(b);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-06-collector-0.4.3","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-06-collector-0.4.3","idAttribute":"support-gzipped-payloads","date":"2025-03-06T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Improve Sidekiq 8 support","category":"Ruby","version":"4.5.3","body":{"code":"var Component=(()=\u003e{var d=Object.create;var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var g=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),f=(e,n)=\u003e{for(var r in n)c(e,r,{get:n[r],enumerable:!0})},a=(e,n,r,t)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let o of u(n))!p.call(e,o)\u0026\u0026o!==r\u0026\u0026c(e,o,{get:()=\u003en[o],enumerable:!(t=l(n,o))||t.enumerable});return e};var x=(e,n,r)=\u003e(r=e!=null?d(m(e)):{},a(n||!e||!e.__esModule?c(r,\"default\",{value:e,enumerable:!0}):r,e)),b=e=\u003ea(c({},\"__esModule\",{value:!0}),e);var h=g((y,s)=\u003e{s.exports=_jsx_runtime});var k={};f(k,{default:()=\u003ev,frontmatter:()=\u003ej});var i=x(h()),j={title:\"Improve Sidekiq 8 support\",category:\"Ruby\",version:\"4.5.3\"};function q(e={}){let{wrapper:n}=e.components||{};return n?(0,i.jsx)(n,Object.assign({},e,{children:(0,i.jsx)(r,{})})):r();function r(){let t=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",code:\"code\",p:\"p\",a:\"a\"},e.components);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,i.jsxs)(t.ul,{children:[`\n`,(0,i.jsxs)(t.li,{children:[\"Specify stricter Rack version requirement. The Ruby gem relies on the \",(0,i.jsx)(t.code,{children:\"Rack::Events\"}),\" constant which was introduced in Rack 2. Update our version requirement to require Rack 2 or newer.\"]}),`\n`]}),`\n`,(0,i.jsx)(t.h2,{id:\"fixed\",children:\"Fixed\"}),`\n`,(0,i.jsxs)(t.ul,{children:[`\n`,(0,i.jsx)(t.li,{children:\"Fix the queue time reporting for Sidekiq 8 jobs. It would report high negative values for the queue time with Sidekiq 8.\"}),`\n`]}),`\n`,(0,i.jsxs)(t.p,{children:[\"View the \",(0,i.jsx)(t.a,{href:\"https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md#453\",children:\"Ruby gem v4.5.3 changelog\"}),\" for more information.\"]})]})}}var v=q;return b(k);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-06-ruby-4.5.3","categorySlug":"ruby","sitemapSlug":"changelog/ruby/2025-03-06-ruby-4.5.3","idAttribute":"improve-sidekiq-8-support","date":"2025-03-06T00:00:00+00:00","year":"2025","style":"c-pill--red"},{"title":"Container host metrics and bug fixes","category":"Collector","version":"0.4.1","body":{"code":"var Component=(()=\u003e{var h=Object.create;var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var p=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),f=(e,n)=\u003e{for(var i in n)a(e,i,{get:n[i],enumerable:!0})},s=(e,n,i,o)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let l of g(n))!m.call(e,l)\u0026\u0026l!==i\u0026\u0026a(e,l,{get:()=\u003en[l],enumerable:!(o=d(n,l))||o.enumerable});return e};var b=(e,n,i)=\u003e(i=e!=null?h(u(e)):{},s(n||!e||!e.__esModule?a(i,\"default\",{value:e,enumerable:!0}):i,e)),x=e=\u003es(a({},\"__esModule\",{value:!0}),e);var c=p((C,r)=\u003e{r.exports=_jsx_runtime});var y={};f(y,{default:()=\u003ev,frontmatter:()=\u003ew});var t=b(c()),w={title:\"Container host metrics and bug fixes\",category:\"Collector\",version:\"0.4.1\"};function j(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(i,{})})):i();function i(){let o=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(o.ul,{children:[`\n`,(0,t.jsx)(o.li,{children:\"Log debug messages and warnings from the config initialization. Previously, any debug messages or warnings that should have been logged upon config initialization where not logged. Now, all config log messages are logged, including debug messages even if the log level is configured as info. This may be improved in the future.\"}),`\n`,(0,t.jsx)(o.li,{children:\"Shut down the collector in case of an internal error. We've seen problems where internal channels close and it causes the collector to stop reporting data. In this case, log what happens and shut down.\"}),`\n`]}),`\n`,(0,t.jsx)(o.h2,{id:\"fixed\",children:\"Fixed\"}),`\n`,(0,t.jsxs)(o.ul,{children:[`\n`,(0,t.jsx)(o.li,{children:\"Disable the host metrics only on the collector container, by default. When the collector is installed on a container alongside the app, it will collect container host metrics.\"}),`\n`]}),`\n`,(0,t.jsxs)(o.p,{children:[\"This release can be installed through \",(0,t.jsx)(o.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var v=j;return x(y);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-05-collector-0.4.1","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-05-collector-0.4.1","idAttribute":"container-host-metrics-and-bug-fixes","date":"2025-03-05T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Filter OpenTelemetry query parameters span attributes","category":"Collector","version":"0.4.0","body":{"code":"var Component=(()=\u003e{var d=Object.create;var l=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(r,t)=\u003e()=\u003e(t||r((t={exports:{}}).exports,t),t.exports),y=(r,t)=\u003e{for(var a in t)l(r,a,{get:t[a],enumerable:!0})},o=(r,t,a,n)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let i of p(t))!g.call(r,i)\u0026\u0026i!==a\u0026\u0026l(r,i,{get:()=\u003et[i],enumerable:!(n=h(t,i))||n.enumerable});return r};var _=(r,t,a)=\u003e(a=r!=null?d(u(r)):{},o(t||!r||!r.__esModule?l(a,\"default\",{value:r,enumerable:!0}):a,r)),f=r=\u003eo(l({},\"__esModule\",{value:!0}),r);var c=m((x,s)=\u003e{s.exports=_jsx_runtime});var q={};y(q,{default:()=\u003eb,frontmatter:()=\u003eE});var e=_(c()),E={title:\"Filter OpenTelemetry query parameters span attributes\",category:\"Collector\",version:\"0.4.0\"};function w(r={}){let{wrapper:t}=r.components||{};return t?(0,e.jsx)(t,Object.assign({},r,{children:(0,e.jsx)(a,{})})):a();function a(){let n=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",code:\"code\",figure:\"figure\",pre:\"pre\",span:\"span\",a:\"a\"},r.components);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(n.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,e.jsxs)(n.ul,{children:[`\n`,(0,e.jsxs)(n.li,{children:[`\n`,(0,e.jsxs)(n.p,{children:[\"Filter query parameters in the \",(0,e.jsx)(n.code,{children:\"url.query\"}),\" span attribute. When an \",(0,e.jsx)(n.code,{children:\"url.query\"}),\" attribute contains an URL encoded query parameter we will filter out the keys configured in the \",(0,e.jsx)(n.code,{children:\"appsignal.config.filter_request_query_parameters\"}),\" resource attribute.\"]}),`\n`,(0,e.jsxs)(n.p,{children:[\"In the situation that a \",(0,e.jsx)(n.code,{children:\"url.query\"}),\" span attribute has the value \",(0,e.jsx)(n.code,{children:\"password=secret\u0026some_param=some_value\"}),\", and the \",(0,e.jsx)(n.code,{children:\"appsignal.config.filter_request_query_parameters\"}),\" resource attribute is configured with \",(0,e.jsx)(n.code,{children:'[\"password\"]'}),\", the \",(0,e.jsx)(n.code,{children:\"url.query\"}),\" span attribute will be stored as \",(0,e.jsx)(n.code,{children:\"password=[FILTERED]\u0026some_param=some_value\"}),\".\"]}),`\n`,(0,e.jsxs)(n.p,{children:[\"If no \",(0,e.jsx)(n.code,{children:\"appsignal.request.query_parameters\"}),\" span attribute is set, we will store the query parameters as a JSON map on this attribute. For example:\"]}),`\n`,(0,e.jsx)(n.figure,{\"data-rehype-pretty-code-figure\":\"\",children:(0,e.jsx)(n.pre,{tabIndex:\"0\",\"data-language\":\"json\",\"data-theme\":\"github-dark\",\"data-raw\":`{\n \"password\": \"[FILTERED]\",\n \"some_param\": \"some_value\"\n}\n`,children:(0,e.jsxs)(n.code,{\"data-language\":\"json\",\"data-theme\":\"github-dark\",style:{display:\"grid\"},children:[(0,e.jsx)(n.span,{\"data-line\":\"\",children:(0,e.jsx)(n.span,{style:{color:\"#E1E4E8\"},children:\"{\"})}),`\n`,(0,e.jsxs)(n.span,{\"data-line\":\"\",children:[(0,e.jsx)(n.span,{style:{color:\"#79B8FF\"},children:' \"password\"'}),(0,e.jsx)(n.span,{style:{color:\"#E1E4E8\"},children:\": \"}),(0,e.jsx)(n.span,{style:{color:\"#9ECBFF\"},children:'\"[FILTERED]\"'}),(0,e.jsx)(n.span,{style:{color:\"#E1E4E8\"},children:\",\"})]}),`\n`,(0,e.jsxs)(n.span,{\"data-line\":\"\",children:[(0,e.jsx)(n.span,{style:{color:\"#79B8FF\"},children:' \"some_param\"'}),(0,e.jsx)(n.span,{style:{color:\"#E1E4E8\"},children:\": \"}),(0,e.jsx)(n.span,{style:{color:\"#9ECBFF\"},children:'\"some_value\"'})]}),`\n`,(0,e.jsx)(n.span,{\"data-line\":\"\",children:(0,e.jsx)(n.span,{style:{color:\"#E1E4E8\"},children:\"}\"})})]})})}),`\n`]}),`\n`]}),`\n`,(0,e.jsx)(n.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,e.jsxs)(n.ul,{children:[`\n`,(0,e.jsxs)(n.li,{children:[`\n`,(0,e.jsxs)(n.p,{children:[\"Rename the \",(0,e.jsx)(n.code,{children:\"working_dir_path\"}),\" config option to \",(0,e.jsx)(n.code,{children:\"working_directory_path\"}),\". This names matches with the naming in our other tools and integrations.\"]}),`\n`,(0,e.jsxs)(n.p,{children:[\"This is a breaking change: With this change the \",(0,e.jsx)(n.code,{children:\"working_dir_path\"}),\" config option will no longer work.\"]}),`\n`]}),`\n`,(0,e.jsxs)(n.li,{children:[`\n`,(0,e.jsxs)(n.p,{children:[\"When the \",(0,e.jsx)(n.code,{children:\"appsignal.config.send_request_query_parameters\"}),\" resource attribute config option value is set to \",(0,e.jsx)(n.code,{children:\"false\"}),\", we will remove the \",(0,e.jsx)(n.code,{children:\"url.query\"}),\" span attribute from spans.\"]}),`\n`]}),`\n`]}),`\n`,(0,e.jsxs)(n.p,{children:[\"This release can be installed through \",(0,e.jsx)(n.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var b=w;return f(q);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-03-03-collector-0.4.0","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-03-03-collector-0.4.0","idAttribute":"filter-opentelemetry-query-parameters-span-attributes","date":"2025-03-03T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Cumulative histogram support and improved query sanitization","category":"Collector","version":"0.3.1","body":{"code":"var Component=(()=\u003e{var d=Object.create;var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var g=(e,t)=\u003e()=\u003e(t||e((t={exports:{}}).exports,t),t.exports),b=(e,t)=\u003e{for(var i in t)r(e,i,{get:t[i],enumerable:!0})},s=(e,t,i,a)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let o of h(t))!p.call(e,o)\u0026\u0026o!==i\u0026\u0026r(e,o,{get:()=\u003et[o],enumerable:!(a=u(t,o))||a.enumerable});return e};var f=(e,t,i)=\u003e(i=e!=null?d(m(e)):{},s(t||!e||!e.__esModule?r(i,\"default\",{value:e,enumerable:!0}):i,e)),x=e=\u003es(r({},\"__esModule\",{value:!0}),e);var c=g((q,l)=\u003e{l.exports=_jsx_runtime});var w={};b(w,{default:()=\u003e_,frontmatter:()=\u003ej});var n=f(c()),j={title:\"Cumulative histogram support and improved query sanitization\",category:\"Collector\",version:\"0.3.1\"};function v(e={}){let{wrapper:t}=e.components||{};return t?(0,n.jsx)(t,Object.assign({},e,{children:(0,n.jsx)(i,{})})):i();function i(){let a=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",code:\"code\",p:\"p\",a:\"a\"},e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,n.jsxs)(a.ul,{children:[`\n`,(0,n.jsxs)(a.li,{children:[\"Sanitize database query attributes following the OpenTelemetry Semantic Conventions 1.30 database specification. We now sanitize SQL queries in the \",(0,n.jsx)(a.code,{children:\"db.query.text\"}),\" attribute and Redis queries in the \",(0,n.jsx)(a.code,{children:\"db.operation.name\"}),\" attribute.\"]}),`\n`,(0,n.jsx)(a.li,{children:\"Add support for cumulative histograms. The previous known state of a cumulative histogram will be stored and its delta will be calculated, in order to send it to AppSignal as a delta histogram.\"}),`\n`]}),`\n`,(0,n.jsxs)(a.p,{children:[\"This release can be installed through \",(0,n.jsx)(a.a,{href:\"https://docs.appsignal.com/collector/installation.html\",children:\"our collector packages and Docker image\"}),\".\"]})]})}}var _=v;return x(w);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-02-27-collector-0.3.1","categorySlug":"collector","sitemapSlug":"changelog/collector/2025-02-27-collector-0.3.1","idAttribute":"cumulative-histogram-support-and-improved-query-sanitization","date":"2025-02-27T00:00:00+00:00","year":"2025","style":"c-pill--teal"},{"title":"Update Prisma instrumentation package","category":"Node.js","version":"3.6.1","body":{"code":"var Component=(()=\u003e{var l=Object.create;var r=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var u=(n,e)=\u003e()=\u003e(e||n((e={exports:{}}).exports,e),e.exports),j=(n,e)=\u003e{for(var i in e)r(n,i,{get:e[i],enumerable:!0})},s=(n,e,i,a)=\u003e{if(e\u0026\u0026typeof e==\"object\"||typeof e==\"function\")for(let o of p(e))!g.call(n,o)\u0026\u0026o!==i\u0026\u0026r(n,o,{get:()=\u003ee[o],enumerable:!(a=h(e,o))||a.enumerable});return n};var x=(n,e,i)=\u003e(i=n!=null?l(d(n)):{},s(e||!n||!n.__esModule?r(i,\"default\",{value:n,enumerable:!0}):i,n)),f=n=\u003es(r({},\"__esModule\",{value:!0}),n);var m=u((y,c)=\u003e{c.exports=_jsx_runtime});var w={};j(w,{default:()=\u003ev,frontmatter:()=\u003e_});var t=x(m()),_={title:\"Update Prisma instrumentation package\",category:\"Node.js\",version:\"3.6.1\"};function b(n={}){let{wrapper:e}=n.components||{};return e?(0,t.jsx)(e,Object.assign({},n,{children:(0,t.jsx)(i,{})})):i();function i(){let a=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",p:\"p\",a:\"a\"},n.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,t.jsxs)(a.ul,{children:[`\n`,(0,t.jsx)(a.li,{children:\"Update Prisma instrumentation to version 6.4. This improves compatibility with new Prisma versions.\"}),`\n`]}),`\n`,(0,t.jsxs)(a.p,{children:[\"View the \",(0,t.jsx)(a.a,{href:\"https://github.com/appsignal/appsignal-nodejs/blob/main/CHANGELOG.md#361\",children:\"Node.js package v3.6.1 changelog\"}),\" for more information.\"]})]})}}var v=b;return f(w);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-02-27-node.js-3.6.1","categorySlug":"nodejs","sitemapSlug":"changelog/nodejs/2025-02-27-node.js-3.6.1","idAttribute":"update-prisma-instrumentation-package","date":"2025-02-27T00:00:00+00:00","year":"2025","style":"c-pill--green"},{"title":"More Heroku errors from logs","category":"App","body":{"code":"var Component=(()=\u003e{var l=Object.create;var c=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var u=(e,r)=\u003e()=\u003e(r||e((r={exports:{}}).exports,r),r.exports),f=(e,r)=\u003e{for(var n in r)c(e,n,{get:r[n],enumerable:!0})},d=(e,r,n,o)=\u003e{if(r\u0026\u0026typeof r==\"object\"||typeof r==\"function\")for(let s of g(r))!p.call(e,s)\u0026\u0026s!==n\u0026\u0026c(e,s,{get:()=\u003er[s],enumerable:!(o=x(r,s))||o.enumerable});return e};var h=(e,r,n)=\u003e(n=e!=null?l(m(e)):{},d(r||!e||!e.__esModule?c(n,\"default\",{value:e,enumerable:!0}):n,e)),j=e=\u003ed(c({},\"__esModule\",{value:!0}),e);var i=u((k,a)=\u003e{a.exports=_jsx_runtime});var y={};f(y,{default:()=\u003eb,frontmatter:()=\u003e_});var t=h(i()),_={title:\"More Heroku errors from logs\",category:\"App\"};function M(e={}){let{wrapper:r}=e.components||{};return r?(0,t.jsx)(r,Object.assign({},e,{children:(0,t.jsx)(n,{})})):n();function n(){let o=Object.assign({h2:\"h2\",p:\"p\",code:\"code\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h2,{id:\"added\",children:\"Added\"}),`\n`,(0,t.jsxs)(o.p,{children:[\"We now detect all \",(0,t.jsx)(o.code,{children:\"Hxx\"}),\" router and \",(0,t.jsx)(o.code,{children:\"Rxx\"}),\" resource errors from Heroku logs by parsing logfmt messages instead of using a single regex pattern.\"]})]})}}var b=M;return j(y);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-02-24-Heroku-errors-from-logs","categorySlug":"app","sitemapSlug":"changelog/app/2025-02-24-Heroku-errors-from-logs","idAttribute":"more-heroku-errors-from-logs","date":"2025-02-24T00:00:00+00:00","year":"2025","style":"c-pill--red"},{"title":"Elixir package v2.14.0","category":"Elixir","version":"2.14.0","body":{"code":"var Component=(()=\u003e{var d=Object.create;var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var m=(e,t)=\u003e()=\u003e(t||e((t={exports:{}}).exports,t),t.exports),f=(e,t)=\u003e{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},l=(e,t,r,i)=\u003e{if(t\u0026\u0026typeof t==\"object\"||typeof t==\"function\")for(let o of p(t))!u.call(e,o)\u0026\u0026o!==r\u0026\u0026a(e,o,{get:()=\u003et[o],enumerable:!(i=s(t,o))||i.enumerable});return e};var x=(e,t,r)=\u003e(r=e!=null?d(g(e)):{},l(t||!e||!e.__esModule?a(r,\"default\",{value:e,enumerable:!0}):r,e)),b=e=\u003el(a({},\"__esModule\",{value:!0}),e);var h=m((O,c)=\u003e{c.exports=_jsx_runtime});var _={};f(_,{default:()=\u003ej,frontmatter:()=\u003ev});var n=x(h()),v={title:\"Elixir package v2.14.0\",category:\"Elixir\",version:\"2.14.0\"};function y(e={}){let{wrapper:t}=e.components||{};return t?(0,n.jsx)(t,Object.assign({},e,{children:(0,n.jsx)(r,{})})):r();function r(){let i=Object.assign({h2:\"h2\",ul:\"ul\",li:\"li\",a:\"a\",code:\"code\",p:\"p\"},e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h2,{id:\"changed\",children:\"Changed\"}),`\n`,(0,n.jsxs)(i.ul,{children:[`\n`,(0,n.jsx)(i.li,{children:\"Update bundled trusted root certificates\"}),`\n`]}),`\n`,(0,n.jsx)(i.h2,{id:\"removed\",children:\"Removed\"}),`\n`,(0,n.jsxs)(i.ul,{children:[`\n`,(0,n.jsxs)(i.li,{children:[\"Remove the OpenTelemetry beta feature in favor of the new \",(0,n.jsx)(i.a,{href:\"https://docs.appsignal.com/collector\",children:\"AppSignal collector\"}),\". If you are using the AppSignal agent to send OpenTelemetry data in our public beta through the \",(0,n.jsx)(i.code,{children:\"/enriched\"}),\" endpoint on the agent's HTTP server, please migrate to the collector to continue using the beta. The collector has a much better implementation of this feature for the beta.\"]}),`\n`]}),`\n`,(0,n.jsx)(i.h2,{id:\"fixed\",children:\"Fixed\"}),`\n`,(0,n.jsxs)(i.ul,{children:[`\n`,(0,n.jsx)(i.li,{children:\"Fix an issue where the AppSignal agent fails to download during installation, by restricting the Hackney dependency to version 1.21.0 or lower.\"}),`\n`]}),`\n`,(0,n.jsxs)(i.p,{children:[\"View the \",(0,n.jsx)(i.a,{href:\"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md#2140\",children:\"Elixir package v2.14.0 changelog\"}),\" for more information.\"]})]})}}var j=y;return b(_);})();\n;return Component;"},"type":"ChangelogPost","slug":"2025-02-24-elixir-2.14.0","categorySlug":"elixir","sitemapSlug":"changelog/elixir/2025-02-24-elixir-2.14.0","idAttribute":"elixir-package-v2140","date":"2025-02-24T00:00:00+00:00","year":"2025","style":"c-pill--purple"}],"totalPosts":804,"currentPage":1},"__N_SSG":true},"page":"/changelog/[[...slug]]","query":{},"buildId":"isuhRUmRDqSyK_siELRjG","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>