DevOps
Amazon CloudWatch Agent gepackaged voor NixOS
TechNative bouwde een Nix Flake waarmee iedereen nu Amazon CloudWatch Agent op NixOS kan installeren.
Voor een intern onderzoeksproject hebben we NixOS geïnstalleerd op een AWS EC2-instance. NixOS is ideaal in een Infrastructure-as-Code-opzet met Terraform en AWS. In een reeks komende blogs ga ik dieper in op de voordelen van NixOS in de AWS-cloud. Deze blog gaat over NixOS en de Amazon CloudWatch Agent, of beter gezegd: het ontbreken van deze software voor NixOS.
Spoiler… We hebben een Nix Flake gebouwd waarmee iedereen nu Amazon CloudWatch Agent op NixOS kan installeren.
In het onderzoeksproject bouwden we een VPC met een aantal EC2-instances die door NixOS worden geconfigureerd. Tijdens dit project liepen we tegen een onverwacht probleem aan. Een applicatie op een EC2-instance veroorzaakte geheugenproblemen. Tot zover niets nieuws, maar toen we het geheugengebruik in de EC2-instance wilden analyseren met CloudWatch Metrics, ontdekten we dat Amazons CloudWatch Agent niet beschikbaar is voor NixOS.
AWS EC2-instances worden verder prima ondersteund door NixOS. De SSM agent is beschikbaar als officieel Nix-package, net als de speciale ENA-netwerkdrivers.
Intern en extern beschikbare metrics
Een hotelkamer is een mooie metafoor voor wat CloudWatch wel en niet kan zien. Het hotelmanagement ziet hoeveel water een gast op de kamer verbruikt. Maar of de gast doucht of het bad laat vollopen, dat zien ze niet.
Zonder agent op de EC2-instance kan CloudWatch een aantal standaardmetrics tonen. CPU-gebruik, disk-I/O en netwerk-I/O zijn metrics die AWS voor elke machine kan laten zien. Maar sommige essentiële metrics zijn alleen vanuit de instance zelf zichtbaar. AWS kan niet zien welk filesystem er in een EC2-instance gemount is, of hoeveel swapruimte er nog vrij is. Ook het geheugen is een blinde vlek voor AWS. Geheugen wordt beheerd door de Linux-kernel en valt daarmee buiten het zicht van AWS als host. De intern beschikbare metrics moeten via een agent naar CloudWatch worden gepubliceerd. Dat is precies wat Amazon CloudWatch Agent doet.
Gelukkig is de CloudWatch Agent een open-sourceproject, geschreven in Go. Het is daarom niet moeilijk om er een NixOS-package voor te schrijven. We hebben nog geen PR aangemaakt, dus voorlopig is de CloudWatch Agent niet via de officiële NixOS-kanalen beschikbaar. Wil je CloudWatch op NixOS gebruiken, dan kun je onze CloudWatch Agent Flake gebruiken. We leggen kort uit hoe je deze flake toepast. De enige voorwaarde is dat je Nix-setup op Nix Flakes is gebaseerd.
Amazon CloudWatch Agent installeren op NixOS
Voeg in de inputs van je flake de Amazon CloudWatch Agent-flake toe.
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
amazon-cloudwatch-agent.url = "github:mipmip/amazon-cloudwatch-agent-nix";
}
}
Daarna importeer je de module en voeg je de CloudWatch Agent-software toe aan de system packages.
Hieronder staat een voorbeeldopzet.
{
description = "NixOS configuration Amazon CloudWatch Agent";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
amazon-cloudwatch-agent.url = "github:mipmip/amazon-cloudwatch-agent-nix";
};
outputs = { self, nixpkgs, amazon-cloudwatch-agent }:
let
system = "x86_64-linux";
amazon-cloudwatch-module = amazon-cloudwatch-agent.nixosModules.default;
amazon-cloudwatch-config = {
services.amazon-cloudwatch-agent.enable = true;
environment.systemPackages = [
amazon-cloudwatch-agent.packages."${system}".amazon-cloudwatch-agent
];
};
in {
nixosConfigurations."<hostname>" = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
amazon-cloudwatch-module
amazon-cloudwatch-config
./configuration.nix
];
};
};
}
Geef CloudWatch Agent toestemming om naar CloudWatch te publiceren
Zodra de agent is geïnstalleerd, hoef je er alleen nog voor te zorgen dat hij zijn metrics naar CloudWatch mag publiceren. Die toestemming geef je door een policy toe te voegen aan het IAM Instance Profile.
Hieronder staat een voorbeeld in Terraform-code van hoe je dit aan je EC2-profile toevoegt.
resource "aws_iam_instance_profile" "ssm-access-iam-profile" {
name = "ec2_profile"
role = aws_iam_role.ssm-access-iam-role.name
}
resource "aws_iam_role" "ssm-access-iam-role" {
name = "ssm-access-role"
description = "The role to access EC2 with SSM"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
Action = "sts:AssumeRole"
}
]
})
}
resource "aws_iam_role_policy_attachment" "cloudwatch-policy" {
role = aws_iam_role.ssm-access-iam-role.name
policy_arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
}
Over NixOS
NixOS is een gerenommeerde en volwassen Linux-distributie, gebouwd op een revolutionair concept: je beschrijft de OS-configuratie in een functionele programmeertaal genaamd Nix. NixOS laat zich niet makkelijk in een paar regels samenvatten, maar vanuit het perspectief van een DevOps-engineer kun je NixOS zien als een Linux-OS waarin de functionaliteit van Ansible standaard is ingebouwd. Je installeert NixOS niet. Je maakt een configuratie en die deploy je.
Over Amazon CloudWatch
CloudWatch is de standaard monitoringdienst van AWS. Met CloudWatch analyseer je logbestanden en metrics op één centrale plek. Je kunt CloudWatch ook zo instellen dat het alarmen genereert wanneer bepaalde metrics hun drempelwaarde bereiken. CloudWatch is een kernonderdeel van TechNatives ACOS-product.
Over TechNative ACOS

Onderdeel van TechNative’s Standard Base is TechNatives Advanced Cloud Observability System. Het systeem bouwt voort op AWS CloudWatch en geeft volledig zicht op je infrastructuur. Via de geïntegreerde Messaging Hub koppel je met diverse alarmmanagementsystemen of messaging-apps, zoals OpsGenie, PagerDuty of Slack. Lees meer over ACOS in de TechNative DevOps Whitepaper.
Links
- https://github.com/wearetechnative/amazon-cloudwatch-agent-nix - De CloudWatch Agent Flake
- https://nixos.org - De officiële NixOS-website
- https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html - AWS CloudWatch Agent-documentatie
- https://github.com/aws/amazon-cloudwatch-agent - AWS CloudWatch Agent-project
Table of contents
Related blogs
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.
No related posts found.