{"id":350328,"date":"2026-08-14T03:25:17","date_gmt":"2026-08-14T03:25:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kloudstack-observability-for-azure\/"},"modified":"2026-08-14T03:24:58","modified_gmt":"2026-08-14T03:24:58","slug":"kloudstack-azure-observability","status":"publish","type":"plugin","link":"https:\/\/zgh.wordpress.org\/plugins\/kloudstack-azure-observability\/","author":23146551,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.6","stable_tag":"2.0.6","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"KloudStack Observability for Azure","header_author":"KloudStack","header_description":"Sends WordPress request, exception and browser telemetry to Azure Application Insights. Built for WordPress running on Azure.","assets_banners_color":"0b0c10","last_updated":"2026-08-14 03:24:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/KloudStack-Hosting\/kloudstack-azure-observability","header_author_uri":"https:\/\/kloudstack.com.au","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.6":{"tag":"2.0.6","author":"kloudstack","date":"2026-08-14 03:24:58"}},"upgrade_notice":{"2.0.6":"<p>Wording only \u2014 the Debug log setting now explains that WP_DEBUG must be enabled separately.<\/p>","2.0.5":"<p>Debug output now goes to the WordPress debug log instead of a file in uploads. Any log left by an\nearlier version can be deleted.<\/p>","2.0.4":"<p>Hardens the debug log against direct access on servers that ignore .htaccess, such as nginx.<\/p>","2.0.3":"<p>Excludes hosting platform management API calls from telemetry.<\/p>","2.0.2":"<p>Fixes health probe exclusion on sites using plain permalinks.<\/p>","2.0.1":"<p>Telemetry is now off by default. After updating, enable it on the settings screen if you want data\nsent to Azure. Existing sites that already had it enabled keep their setting.<\/p>","2.0.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3646533,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3646533,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3646533,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3646533,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3646533,"resolution":"1","location":"assets","locale":"","width":1742,"height":1703},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3646533,"resolution":"2","location":"assets","locale":"","width":1750,"height":2552}},"screenshots":{"1":"Settings \u2014 connection, telemetry, privacy and advanced controls in one screen. On Azure the connection string is read from the hosting environment and shown read-only.","2":"The built-in diagnostics self-test \u2014 checks configuration, the Azure environment, outbound connectivity and a live round-trip to Azure through the real transport path, with a copy-paste report for support."}},"plugin_section":[],"plugin_tags":[8093,13289,5603,248562,32683],"plugin_category":[54],"plugin_contributors":[275618],"plugin_business_model":[],"class_list":["post-350328","plugin","type-plugin","status-publish","hentry","plugin_tags-application-insights","plugin_tags-azure","plugin_tags-monitoring","plugin_tags-observability","plugin_tags-telemetry","plugin_category-security-and-spam-protection","plugin_contributors-kloudstack","plugin_committers-kloudstack","plugin_support_reps-pauljohnstone"],"banners":{"banner":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/banner-772x250.png?rev=3646533","banner_2x":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/banner-1544x500.png?rev=3646533","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/icon-128x128.png?rev=3646533","icon_2x":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/icon-256x256.png?rev=3646533","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/screenshot-1.png?rev=3646533","caption":"Settings \u2014 connection, telemetry, privacy and advanced controls in one screen. On Azure the connection string is read from the hosting environment and shown read-only."},{"src":"https:\/\/ps.w.org\/kloudstack-azure-observability\/assets\/screenshot-2.png?rev=3646533","caption":"The built-in diagnostics self-test \u2014 checks configuration, the Azure environment, outbound connectivity and a live round-trip to Azure through the real transport path, with a copy-paste report for support."}],"raw_content":"<!--section=description-->\n<p>KloudStack Observability for Azure connects a WordPress site to Azure Application Insights, so\nyou can see request performance, errors and browser telemetry in Azure Monitor alongside the\nrest of your Azure estate.<\/p>\n\n<p>The plugin is built specifically for WordPress hosted on Azure. It reads its configuration from\nApp Service application settings automatically, names telemetry using the Azure site, slot and\nregion so one Application Insights resource can serve many sites, and produces a telemetry\nschema designed to work with Azure Monitor workbooks.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Server-side request telemetry with normalised route names<\/li>\n<li>Uncaught exception and fatal error telemetry<\/li>\n<li>Browser telemetry via the official Application Insights JavaScript SDK<\/li>\n<li>Correlation between browser and server telemetry using W3C trace context<\/li>\n<li>Automatic Azure environment detection \u2014 App Service, Container Apps, AKS and Virtual Machines<\/li>\n<li>Cloud role naming from the Azure site and deployment slot<\/li>\n<li>Configurable sampling to control Azure ingestion cost<\/li>\n<li>Privacy controls: IP anonymisation, query-string redaction, consent gating<\/li>\n<li>Built-in diagnostics self-test and WordPress Site Health integration<\/li>\n<\/ul>\n\n<h4>Designed for Azure<\/h4>\n\n<p>This plugin assumes Azure hosting. It will run elsewhere if you supply a connection string, but\nAzure environment enrichment will be unavailable and support is limited to Azure deployments.<\/p>\n\n<h4>Performance<\/h4>\n\n<p>Telemetry is buffered during the request and transmitted only after the response has been\nreleased to the visitor, so Application Insights latency or availability never affects your\nsite's response time. A circuit breaker suspends transmission if the ingestion endpoint becomes\nunreachable.<\/p>\n\n<h4>Trademarks<\/h4>\n\n<p>Azure, Microsoft Azure and Application Insights are trademarks of the Microsoft group of\ncompanies. This is an independent plugin and is not affiliated with, endorsed by, or sponsored\nby Microsoft.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends data to Microsoft Azure Application Insights, a third-party service operated\nby Microsoft. It does this so that telemetry collected from your site can be stored, queried and\nvisualised in Azure Monitor.<\/p>\n\n<p><strong>What is sent, and when:<\/strong> on each non-excluded page request, the plugin transmits the request\nroute, duration, HTTP response code, and contextual data about the WordPress installation\n(WordPress version, PHP version, active theme, plugin count, memory usage, query count) to the\nApplication Insights ingestion endpoint configured for your Azure resource. Uncaught exceptions\nand fatal errors are transmitted with their message, type and stack trace. If browser telemetry\nis enabled, the Application Insights JavaScript SDK is loaded in visitors' browsers and sends\npage views, AJAX calls and JavaScript errors directly to the same endpoint.<\/p>\n\n<p><strong>Nothing is sent until you turn it on.<\/strong> All telemetry is off by default. On a fresh install the\nplugin transmits nothing at all \u2014 not server-side request data, and not browser data \u2014 until you\nenable it on the settings screen. Browser telemetry is a second, separate opt-in: no JavaScript\nSDK is loaded and no visitor data is collected in the browser unless you enable that as well.\nServer-side telemetry additionally requires an Application Insights connection string; without\none, nothing leaves your site regardless of the settings.<\/p>\n\n<p><strong>Visitor data:<\/strong> client IP addresses are anonymised before transmission by default. Query\nstrings are redacted against an allowlist by default. Request and response headers, which may\ncontain cookies and authorization data, are <strong>not<\/strong> transmitted unless you explicitly enable\nthat option.<\/p>\n\n<p><strong>Cookies are off by default.<\/strong> When you enable browser telemetry it runs in cookie-less mode,\nso the SDK sets no <code>ai_user<\/code> or <code>ai_session<\/code> cookies and, in most jurisdictions, no visitor\nconsent obligation arises from using it.<\/p>\n\n<p>The trade-off: without those cookies Application Insights cannot group requests into sessions or\ndistinguish returning visitors, so reports show page and dependency timings but <strong>not<\/strong> \"users\"\nor \"sessions\". If you need that aggregation, turn cookie-less mode off in Settings \u2014 but the\ncookies then require visitor consent in most jurisdictions, and obtaining it becomes your\nresponsibility. A <code>kloudstack_obs_has_consent<\/code> filter is provided so a consent management\nplatform can gate injection.<\/p>\n\n<p><strong>Endpoints contacted:<\/strong> the Application Insights ingestion endpoint from your connection string\n(typically <code>https:\/\/&lt;region&gt;.in.applicationinsights.azure.com<\/code> or\n    https:\/\/dc.services.visualstudio.com), and <code>https:\/\/js.monitor.azure.com<\/code> for the JavaScript\nSDK unless the bundled local copy is selected in settings.<\/p>\n\n<p>Microsoft terms of use: https:\/\/azure.microsoft.com\/support\/legal\/\nMicrosoft privacy statement: https:\/\/privacy.microsoft.com\/privacystatement<\/p>\n\n<p>No data is sent to KloudStack. The plugin does not phone home.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>If your site runs on Azure App Service, add <code>APPLICATIONINSIGHTS_CONNECTION_STRING<\/code> to your\napplication settings. The plugin will detect it automatically.<\/li>\n<li>Otherwise, go to Tools &gt; KloudStack Observability and paste your Application Insights\nconnection string.<\/li>\n<li>Run the built-in self-test to confirm telemetry is reaching Azure.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20azure%20subscription%3F\"><h3>Do I need an Azure subscription?<\/h3><\/dt>\n<dd><p>Yes. The plugin sends telemetry to an Application Insights resource in your own Azure\nsubscription. Azure charges for telemetry ingestion and retention apply under your Azure\nagreement.<\/p><\/dd>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>No. Telemetry is transmitted after the response has been released to the visitor, so Azure\nlatency does not affect page load time.<\/p><\/dd>\n<dt id=\"why%20do%20my%20browser%20page%20views%20outnumber%20my%20server%20requests%3F\"><h3>Why do my browser page views outnumber my server requests?<\/h3><\/dt>\n<dd><p>If you use full-page caching, cached responses are served without running PHP, so no server-side\nrequest telemetry is produced \u2014 while the browser SDK still fires. This is expected.<\/p><\/dd>\n<dt id=\"can%20i%20use%20one%20application%20insights%20resource%20for%20several%20sites%3F\"><h3>Can I use one Application Insights resource for several sites?<\/h3><\/dt>\n<dd><p>Yes. Each site reports a distinct cloud role name, derived from the Azure site name or set\nmanually in settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.6<\/h4>\n\n<ul>\n<li>The Debug log setting now says plainly that it does nothing on its own, and names the\ndefine( 'WP_DEBUG', true ); line that has to be added to wp-config.php for it to take effect.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>The plugin no longer writes a log file of its own. Debug output is handed to WordPress via\nerror_log(), so WP_DEBUG_LOG decides where it lands. The setting itself is unchanged.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>The debug log filename now carries a per-site random suffix. The .htaccess written beside it\ndenies direct access on Apache, but nginx ignores .htaccess entirely, so on those servers a\nfixed, identical-everywhere filename was guessable and the log fetchable. Both guards are kept.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Hosting platform management API calls are excluded from request telemetry, alongside the health\nprobe. These are the host calling the site rather than the site's own traffic, and being slow by\nnature they dominated the slowest-routes report.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Health probe exclusion now also matches sites using plain permalinks, where the same route is\nreached as \/?rest_route=\/custom\/v1\/healthcheck rather than \/wp-json\/custom\/v1\/healthcheck.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Telemetry is now OFF by default and must be enabled by the site owner. Nothing is transmitted\nuntil you turn it on, in line with WordPress.org guidelines 7 and 9.<\/li>\n<li>The settings screen now states plainly when telemetry is off and nothing is being sent.<\/li>\n<li>The debug log is written to a protected <code>kloudstack-azure-observability<\/code> folder inside the\nuploads directory, resolved with wp_upload_dir(), instead of the uploads root.<\/li>\n<li>The browser SDK snippet is registered through wp_add_inline_script() rather than emitted as a\nraw script tag.<\/li>\n<li>Hosting platform health probes are excluded from request telemetry. On a low-traffic site these\ncould account for over 99% of recorded requests, hiding the site's real traffic and adding\nneedless ingestion cost.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress request, exception and browser telemetry to Azure Application Insights. Built for WordPress running on Azure.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350328"}],"author":[{"embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kloudstack"}],"wp:attachment":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350328"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350328"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350328"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350328"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350328"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}