Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/datadog/datadog-agent

Main repository for Datadog Agent
https://github.com/datadog/datadog-agent

apm-agent apm-instrumentation datadog distributed-tracing go logging metrics monitoring observability open-telemetry otel profiling tracing

Last synced: 9 days ago
JSON representation

Main repository for Datadog Agent

Awesome Lists containing this project

README

        

# Datadog Agent

[![CircleCI](https://circleci.com/gh/DataDog/datadog-agent/tree/main.svg?style=svg)](https://circleci.com/gh/DataDog/datadog-agent/tree/main)
[![Windows unit tests](https://github.com/DataDog/datadog-agent/actions/workflows/windows-unittests.yml/badge.svg)](https://github.com/DataDog/datadog-agent/actions/workflows/windows-unittests.yml)
[![Coverage status](https://codecov.io/github/DataDog/datadog-agent/coverage.svg?branch=main)](https://codecov.io/github/DataDog/datadog-agent?branch=main)
[![GoDoc](https://godoc.org/github.com/DataDog/datadog-agent?status.svg)](https://godoc.org/github.com/DataDog/datadog-agent)
[![Go Report Card](https://goreportcard.com/badge/github.com/DataDog/datadog-agent)](https://goreportcard.com/report/github.com/DataDog/datadog-agent)

The present repository contains the source code of the Datadog Agent version 7 and version 6. Please refer to the [Agent user documentation](https://docs.datadoghq.com/agent/) for information about differences between Agent v5, Agent v6 and Agent v7. Additionally, we provide a list of prepackaged binaries for an easy install process [here](https://app.datadoghq.com/account/settings/agent/latest?platform=overview)

**Note:** the source code of Datadog Agent v5 is located in the
[dd-agent](https://github.com/DataDog/dd-agent) repository.

## Documentation

The general documentation of the project, including instructions for installation
and development, is located under [the docs directory](docs) of the present repo.

## Getting started

To build the Agent you need:
* [Go](https://golang.org/doc/install) 1.22 or later. You'll also need to set your `$GOPATH` and have `$GOPATH/bin` in your path.
* Python 3.11+ along with development libraries for tooling. You will also need Python 2.7 if you are building the Agent with Python 2 support.
* Python dependencies. You may install these with `pip install -r requirements.txt`
This will also pull in [Invoke](http://www.pyinvoke.org) if not yet installed.
* CMake version 3.12 or later and a C++ compiler

**Note:** you may want to use a python virtual environment to avoid polluting your
system-wide python environment with the agent build/dev dependencies. You can
create a virtual environment using `virtualenv` and then use the `invoke agent.build`
parameters `--python-home-2=` and/or `--python-home-3=`
(depending on the python versions you are using) to use the virtual environment's
interpreter and libraries. By default, this environment is only used for dev dependencies
listed in `requirements.txt`.

**Note:** You may have previously installed `invoke` via brew on MacOS, or `pip` in
any other platform. We recommend you use the version pinned in the requirements
file for a smooth development/build experience.

**Note:** You can enable auto completion for invoke tasks. Use the command below to add the appropriate line to your `.zshrc` file.
`echo "source <(inv --print-completion-script zsh)" >> ~/.zshrc`

Builds and tests are orchestrated with `invoke`, type `invoke --list` on a shell
to see the available tasks.

To start working on the Agent, you can build the `main` branch:

1. Checkout the repo: `git clone https://github.com/DataDog/datadog-agent.git $GOPATH/src/github.com/DataDog/datadog-agent`.
2. cd into the project folder: `cd $GOPATH/src/github.com/DataDog/datadog-agent`.
3. Install go tools: `invoke install-tools` (if you have a timeout error, you might need to prepend the `GOPROXY=https://proxy.golang.org,https://goproxy.io,direct` env var to the command).
4. Create a development `datadog.yaml` configuration file in `dev/dist/datadog.yaml`, containing a valid API key: `api_key: `. You can either start with an empty one or use the full one generated by the Agent build from Step 5 (located in `cmd/agent/dist/datadog.yaml` after the build finishes).
5. Build the agent with `invoke agent.build --build-exclude=systemd`.

You can specify a custom Python location for the agent (useful when using
virtualenvs):

invoke agent.build \
--python-home-2=$GOPATH/src/github.com/DataDog/datadog-agent/venv2 \
--python-home-3=$GOPATH/src/github.com/DataDog/datadog-agent/venv3

Running `invoke agent.build`:

* Discards any changes done in `bin/agent/dist`.
* Builds the Agent and writes the binary to `bin/agent/agent`.
* Copies files from `dev/dist` to `bin/agent/dist`. See `https://github.com/DataDog/datadog-agent/blob/main/dev/dist/README.md` for more information.

If you built an older version of the agent, you may have the error `make: *** No targets specified and no makefile found. Stop.`. To solve the issue, you should remove `CMakeCache.txt` from `rtloader` folder with `rm rtloader/CMakeCache.txt`.

Please note that the [trace agent](https://docs.datadoghq.com/tracing/trace_collection/) needs to be built and run separately.

Please refer to the [Agent Developer Guide](docs/dev/README.md) for more details. For instructions
on setting up a windows dev environment, refer to [Windows Dev Env](devenv).

## Testing

Run unit tests using `invoke test`.
```
invoke test --targets=./pkg/aggregator
```

You can also use `invoke linter.go` to run just the go linters.
```
invoke linter.go
```

When testing code that depends on [rtloader](/rtloader), build and install it first.
```
invoke rtloader.make && invoke rtloader.install
invoke test --targets=./pkg/collector/python
```

## Run

You can run the agent with:
```
./bin/agent/agent run -c bin/agent/dist/datadog.yaml
```

The file `bin/agent/dist/datadog.yaml` is copied from `dev/dist/datadog.yaml` by `invoke agent.build` and must contain a valid api key.

### Run a JMX check
In order to run a JMX based check locally, you must have:
1. A copy of a JMXFetch `jar` copied to `dev/dist/jmx/jmxfetch.jar`
2. `java` available on your `$PATH`

For detailed instructions, see [JMX checks](./docs/dev/checks/jmxfetch.md)

## Contributing code

You'll find information and help on how to contribute code to this project under
[the `docs/dev` directory](docs/dev) of the present repo.

## License

The Datadog agent user space components are licensed under the
[Apache License, Version 2.0](LICENSE). The BPF code is licensed
under the [General Public License, Version 2.0](pkg/ebpf/c/COPYING).