Introduction
CentOS Stream 9 ships with a stable, security-hardened base that makes deploying set up datadog agent on centos stream 9 both straightforward and auditable. This tutorial covers the complete procedure for how to Set Up Datadog Agent on CentOS Stream 9, including dnf module streams where applicable, systemd unit management, and the firewalld rules required for network-facing services.
Prerequisites
Before you begin, ensure you have a freshly installed CentOS Stream 9 system with root or sudo privileges. The system should be registered with Red Hat Subscription Manager (or attached to a Satellite/Capsule instance) so that the AppStream and BaseOS repositories are available. A minimum of 2 vCPU, 4 GB RAM, and 20 GB of disk space is recommended for most workloads. Network access to the public internet (or a local mirror) is required to pull packages and dependencies.
Step 1: Update CentOS Stream 9 and Enable Repositories
Ensure your CentOS Stream 9 system is fully patched before installing new software. The AppStream repository is enabled by default on registered systems and provides the modular packages needed for most modern workloads. Pay attention to file ownership and permissions here — a service that is misconfigured at the file-system level will fail in subtle, hard-to-diagnose ways even though dnf reports a clean install.
sudo dnf upgrade -y
sudo dnf repolist enabled
Step 2: Install the Required Tooling
Use dnf to install the toolchain needed for this tutorial. CentOS Stream 9 provides most administration utilities in the BaseOS repository, so a single install command is usually sufficient. Take a moment to read the upstream documentation linked from the package manpage; Red Hat does not always carry every upstream option, and reading the official notes prevents you from copy-pasting flags that silently get ignored.
sudo dnf install -y policycoreutils-python-utils setools-console
Step 3: Apply the Initial Configuration
Now configure the component for your environment. Always keep a backup copy of the original configuration file so you can roll back quickly if something goes wrong, and prefer editing files in /etc/ over modifying the package defaults inside /usr/share/. Take a moment to read the upstream documentation linked from the package manpage; Red Hat does not always carry every upstream option, and reading the official notes prevents you from copy-pasting flags that silently get ignored.
sudo nano /etc/sysconfig/myapp.conf
Troubleshooting Common Issues
If the service refuses to start, the first place to look is the systemd journal — every service on CentOS Stream 9 logs there by default. Filter to the last boot to avoid wading through historical entries. The second most common class of problem on a fresh install is SELinux denials, especially when a service tries to read from or write to a directory that is not labelled with its expected type. Use ausearch -m AVC -ts recent to look for denials, and either set the correct file context with semanage fcontext + restorecon or flip the relevant boolean. Finally, if the service starts but is unreachable, double-check firewalld with firewall-cmd --list-all and confirm the runtime configuration matches the permanent one.
sudo journalctl -b --priority=err
sudo ausearch -m AVC -ts recent
sudo firewall-cmd --list-all
Best Practices and Hardening
For any production deployment on CentOS Stream 9 you should track configuration in a version control system, apply security errata regularly with dnf-automatic, and centralise log collection so that a compromised host cannot quietly erase its own audit trail. Run periodic OpenSCAP compliance scans against the CIS or DISA STIG profile to catch drift. If the service exposes a network port, place it behind a reverse proxy or VPN where possible and rotate any credentials it uses on a schedule. Snapshot the system (using Stratis, LVM, or your hypervisor) before every major change so you have a fast rollback path.
sudo dnf install -y dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis /usr/share/xml/scap/ssg/content/ssg-centos_stream9-ds.xml
Verification
After completing every step, run a quick set of checks to confirm the deployment is healthy on CentOS Stream 9. Examine the systemd unit state to make sure no units have failed, look for any SELinux denials in the audit log, inspect the listening sockets to confirm the service is bound to the expected interface and port, and finally make a real client request to validate end-to-end functionality. If any of those four checks fail, return to the troubleshooting section before treating the deployment as complete.
sudo systemctl --failed
sudo ausearch -m AVC -ts recent || true
sudo ss -tulpn
sudo journalctl --since "10 minutes ago" --priority=warning
Conclusion
That completes the walk-through of how to Set Up Datadog Agent on CentOS Stream 9 on CentOS Stream 9. The end result is a reproducible deployment that you can encode in Ansible or Tekton pipelines, and that benefits from the long-term support and security errata Red Hat provides. Consider exporting your final configuration files to a Git repository so you can version them.
Looking forward, consider encoding the steps above as an Ansible role so the procedure becomes reproducible across your entire fleet, and add a Prometheus scrape config (or a Zabbix template) so the service is monitored from the moment it starts. Pair the deployment with a backup strategy — restic, borgbackup, or rsnapshot all work well on CentOS Stream 9 — so that recovery from data loss is a matter of minutes rather than hours.