packaged by Chainguard
Contact our team to test out this image for free. Please also indicate any other images you would like to evaluate.
The clamav-prometheus-exporter-fips image scrapes a ClamAV daemon over clamd's native protocol and exposes the results as Prometheus metrics on port 9810, built against a FIPS-validated cryptographic module.
Chainguard Containers are regularly-updated, secure-by-default container images.
For those with access, this container image is available on cgr.dev:
Be sure to replace the ORGANIZATION placeholder with the name used for your organization's private repository within the Chainguard Registry.
The clamav-prometheus-exporter-fips image is comparable to the upstream rekzi/clamav-prometheus-exporter image published from the upstream project, and is designed to be a drop-in replacement for it. The flags, the metrics it exports, and the 9810 listener are identical to the non-FIPS clamav-prometheus-exporter image. Two differences from upstream are worth noting:
/usr/bin/clamav-prometheus-exporter rather than /bin/clamav-prometheus-exporter. /bin is a symlink to /usr/bin, so upstream's path resolves to the same binary and overriding the entrypoint with either absolute path works.65532 (nonroot) instead of UID 1000. The exporter needs no writable paths, so this does not require any changes.This image contains only the exporter and its runtime dependencies; it does not include a shell or a package manager.
The clamav-prometheus-exporter-fips Chainguard Container ships with a validated redistribution of OpenSSL's FIPS provider module. For more on FIPS support in Chainguard Containers, consult the guide on FIPS-enabled Chainguard Containers on Chainguard Academy.
The hardened OpenSSL configuration the image ships keeps that provider primary, but it is not a hard startup requirement. If the OpenSSL FIPS provider fails to load, the Go toolchain this binary is built with falls back to its own embedded FIPS module and keeps running rather than aborting. That fallback is still FIPS-mode crypto, but it is not the OpenSSL module, so a clean startup on its own does not tell you which one is in use. Ask the runtime directly:
cgr_verbose=1 makes the runtime name the module it selected before main runs; -h simply gives it something that exits once the line has been printed. Exactly cgr_fips: openssl is the passing result. A fallback names itself instead, and reports why:
The exporter has no state of its own — it scrapes a running ClamAV daemon and re-publishes what it finds. You will need:
clamd instance, either over TCP or over a Unix socket shared with the exporter. Chainguard publishes a FIPS clamav image for this at cgr.dev/ORGANIZATION/clamav-fips./metrics endpoint.Refer to the upstream project for the full list of exported series.
The exporter always serves /metrics on port 9810. It has nothing to report without a clamd to scrape, so put both on the same Docker network and address clamd by container name:
clamd loads its signature database before it accepts connections, which takes up to a minute on a first start. The exporter comes up immediately either way, so poll it rather than guessing:
Scraping the endpoint then returns the ClamAV series alongside the standard Go collector series:
Tear the example down with docker rm -f clamav-exporter clamd && docker network rm clamav-demo.
While clamd is unreachable the exporter keeps serving /metrics rather than failing the scrape, so an outage shows up as a metric rather than as a dead endpoint. Only clamav_up 0 is left, though: every other series above is derived from clamd's own STATS and VERSION replies, so they disappear until it comes back.
The most common deployment is a sidecar next to clamd, where the two containers reach each other over the pod's loopback interface:
The exporter is configured entirely through command-line flags; there is no configuration file and no environment-variable interface:
| Flag | Default | Description |
|---|---|---|
|
| Host name, IP address, or Unix socket path of the ClamAV daemon. |
|
| Port of the ClamAV daemon. Ignored when |
|
| Either |
|
| One of |
When clamd and the exporter share a volume, prefer the Unix socket: it keeps the ClamAV control protocol off the network entirely, which matters because clamd has no authentication of its own. Note that -clamav-address then carries the socket path, and -clamav-port is unused:
Raising the log level to debug does not echo the clamd exchange. What it adds is how the exporter parsed each reply: the regex match list for the STATS and VERSION responses, plus the value it took from each field. Run it against the clamd from Getting Started above:
That makes debug useful for one thing specifically: telling a clamd whose reply the exporter could not parse (an empty match list, and the corresponding series missing from /metrics) from one it parsed cleanly. It is not the way to diagnose a connection problem — an unreachable clamd is logged at error level, so it is already visible at the default info level.
One upstream quirk to be aware of while reading that output: the memHeap, memMmap and memUsed debug lines are each labelled one MEMSTATS field off from the number they print, so memHeap shows the mmap figure, and so on. The exported clamav_mem_*_bytes series are correct; only these three debug labels are misleading.
Chainguard's free tier of Starter container images are built with Wolfi, our minimal Linux undistro.
All other Chainguard Containers are built with Chainguard OS, Chainguard's minimal Linux operating system designed to produce container images that meet the requirements of a more secure software supply chain.
The main features of Chainguard Containers include:
For cases where you need container images with shells and package managers to build or debug, most Chainguard Containers come paired with a development, or -dev, variant.
In all other cases, including Chainguard Containers tagged as :latest or with a specific version number, the container images include only an open-source application and its runtime dependencies. These minimal container images typically do not contain a shell or package manager.
Although the -dev container image variants have similar security features as their more minimal versions, they include additional software that is typically not necessary in production environments. We recommend using multi-stage builds to copy artifacts from the -dev variant into a more minimal production image.
To improve security, Chainguard Containers include only essential dependencies. Need more packages? Chainguard customers can use Custom Assembly to add packages, either through the Console, chainctl, or API.
To use Custom Assembly in the Chainguard Console: navigate to the image you'd like to customize in your Organization's list of images, and click on the Customize image button at the top of the page.
Refer to our Chainguard Containers documentation on Chainguard Academy. Chainguard also offers VMs and Libraries — contact us for access.
This software listing is packaged by Chainguard. The trademarks set forth in this offering are owned by their respective companies, and use of them does not imply any affiliation, sponsorship, or endorsement by such companies.
Chainguard's container images contain software packages that are direct or transitive dependencies. The following licenses were found in the "latest" tag of this image:
Apache-2.0
GCC-exception-3.1
GPL-3.0-or-later
LGPL-2.1-or-later
MIT
MPL-2.0
NIST-PD
For a complete list of licenses, please refer to this Image's SBOM.
Software license agreementChainguard Containers are SLSA Level 3 compliant with detailed metadata and documentation about how it was built. We generate build provenance and a Software Bill of Materials (SBOM) for each release, with complete visibility into the software supply chain.
SLSA compliance at ChainguardThis image helps reduce time and effort in establishing PCI DSS 4.0 compliance with low-to-no CVEs.
PCI DSS at ChainguardThis is a FIPS validated image for FedRAMP compliance.
This image is STIG hardened and scanned against the DISA General Purpose Operating System SRG with reports available.
Learn more about STIGsGet started with STIGs