Paul's Blog

A collection of notes and stuff I find interesting

Streamline Network Observability on AKS: A Step-by-Step Guide to enable the AKS add-on with Terraform

2023-07-10 11 min read Tutorial
Have you ever had to troubleshoot network issues in your Kubernetes clusters? If so, you know how challenging it can be to identify and resolve problems. To troubleshoot network issues you probably had to use a combination of tools like kubectl, tcpdump, wireshark, and netstat. The list goes on and on… While these tools are great for debugging and capturing network logs and traces, they don’t provide a holistic view of your cluster’s network traffic. Continue reading

Monitoring Azure Container Apps With Azure Managed Grafana

2022-09-09 10 min read Tutorial
The Azure Monitor team has announced the general availability of the Azure Managed Grafana (AMG) service. As part of the announcement, they also announced the availability of curated Grafana dashboards for various Azure services including Azure Container Apps 🎉 Grafana is very popular within the Cloud Native community and it seems natural to use it for Azure Container Apps (ACA) observability. In this post, I will walk you through provisioning the ACA and AMG resources using the Terraform AzAPI provider and show you how easy it is to import the ACA dashboards into your AMG instance. Continue reading

Terraform: Azure Container Apps with Azure Managed Grafana using the AzAPI provider

2022-09-09 3 min read Code snippets
Code snippet for the Monitoring Azure Container Apps With Azure Managed Grafana article. terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">=3.0.0" } azapi = { source = "azure/azapi" version = ">=0.5.0" } } } provider "azurerm" { features { resource_group { prevent_deletion_if_contains_resources = false } key_vault { purge_soft_delete_on_destroy = false } } } resource "random_pet" "aca" { length = 2 separator = "" } resource "random_integer" "aca" { min = 000 max = 999 } resource "random_string" "aca" { length = 5 lower = true upper = false numeric = true special = false keepers = { # Generate a new random_string on every run to avoid a conflict with the previous revision none = timestamp() } } locals { resource_name = format("%s", random_pet. Continue reading