mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-02 16:46:35 +00:00
Add: push docker images to dockerhub and quay.io (#1469)
This commit is contained in:
3
.github/workflows/lint.yml
vendored
3
.github/workflows/lint.yml
vendored
@@ -44,7 +44,6 @@ jobs:
|
|||||||
Expand-Archive -Path promu-$($Env:PROMU_VER).windows-amd64.zip -DestinationPath .
|
Expand-Archive -Path promu-$($Env:PROMU_VER).windows-amd64.zip -DestinationPath .
|
||||||
Copy-Item -Path promu-$($Env:PROMU_VER).windows-amd64\promu.exe -Destination "$(go env GOPATH)\bin"
|
Copy-Item -Path promu-$($Env:PROMU_VER).windows-amd64\promu.exe -Destination "$(go env GOPATH)\bin"
|
||||||
|
|
||||||
go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.2.0
|
|
||||||
# GOPATH\bin dir must be appended to PATH else the `promu` command won't be found
|
# GOPATH\bin dir must be appended to PATH else the `promu` command won't be found
|
||||||
echo "$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
echo "$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
|
||||||
@@ -69,8 +68,6 @@ jobs:
|
|||||||
Expand-Archive -Path promu-$($Env:PROMU_VER).windows-amd64.zip -DestinationPath .
|
Expand-Archive -Path promu-$($Env:PROMU_VER).windows-amd64.zip -DestinationPath .
|
||||||
Copy-Item -Path promu-$($Env:PROMU_VER).windows-amd64\promu.exe -Destination "$(go env GOPATH)\bin"
|
Copy-Item -Path promu-$($Env:PROMU_VER).windows-amd64\promu.exe -Destination "$(go env GOPATH)\bin"
|
||||||
|
|
||||||
# No binaries available so build from source
|
|
||||||
go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.2.0
|
|
||||||
# GOPATH\bin dir must be appended to PATH else the `promu` command won't be found
|
# GOPATH\bin dir must be appended to PATH else the `promu` command won't be found
|
||||||
echo "$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
echo "$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
|
||||||
|
|||||||
33
.github/workflows/release.yml
vendored
33
.github/workflows/release.yml
vendored
@@ -2,6 +2,10 @@ name: Releases
|
|||||||
|
|
||||||
# Trigger on releases.
|
# Trigger on releases.
|
||||||
on:
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
release:
|
release:
|
||||||
types:
|
types:
|
||||||
- published
|
- published
|
||||||
@@ -68,7 +72,7 @@ jobs:
|
|||||||
path: output\windows_exporter-*.exe
|
path: output\windows_exporter-*.exe
|
||||||
|
|
||||||
- name: Build Release Artifacts
|
- name: Build Release Artifacts
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
run: |
|
run: |
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
$BuildVersion = Get-Content VERSION
|
$BuildVersion = Get-Content VERSION
|
||||||
@@ -83,6 +87,31 @@ jobs:
|
|||||||
|
|
||||||
promu checksum output\
|
promu checksum output\
|
||||||
|
|
||||||
|
- name: Build Docker Artifacts
|
||||||
|
run: make build-all
|
||||||
|
env:
|
||||||
|
VERSION: >-
|
||||||
|
${{
|
||||||
|
startsWith(github.ref, 'refs/tags/') && 'latest' ||
|
||||||
|
(
|
||||||
|
github.event_name == 'pull_request' && format('pr-{0}', github.event.number) || github.ref_name
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_HUB_LOGIN }}
|
||||||
|
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: '$token'
|
||||||
|
password: ${{ secrets.QUAY_IO_API_TOKEN }}
|
||||||
|
|
||||||
- name: Login to GitHub container registry
|
- name: Login to GitHub container registry
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -95,8 +124,8 @@ jobs:
|
|||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
VERSION: ${{ startsWith(github.ref, 'refs/tags/') && 'latest' || github.ref_name }}
|
||||||
run: |
|
run: |
|
||||||
$Env:VERSION = 'latest'
|
|
||||||
make push-all
|
make push-all
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Note this image doesn't really matter for hostprocess but it is good to build per OS version
|
# Note this image doesn't really matter for hostprocess but it is good to build per OS version
|
||||||
# the files in the image are copied to $env:CONTAINER_SANDBOX_MOUNT_POINT on the host
|
# the files in the image are copied to $env:CONTAINER_SANDBOX_MOUNT_POINT on the host
|
||||||
# but the file system is the Host NOT the container
|
# but the file system is the Host NOT the container
|
||||||
ARG BASE="mcr.microsoft.com/windows/nanoserver:1809"
|
ARG BASE="mcr.microsoft.com/windows/nanoserver:ltsc2022"
|
||||||
FROM $BASE
|
FROM $BASE
|
||||||
|
|
||||||
ENV PATH="C:\Windows\system32;C:\Windows;"
|
ENV PATH="C:\Windows\system32;C:\Windows;"
|
||||||
|
|||||||
27
Makefile
27
Makefile
@@ -1,15 +1,21 @@
|
|||||||
export GOOS=windows
|
export GOOS=windows
|
||||||
export DOCKER_IMAGE_NAME ?= windows-exporter
|
export DOCKER_IMAGE_NAME ?= windows-exporter
|
||||||
export DOCKER_REPO ?= ghcr.io/prometheus-community
|
|
||||||
|
# DOCKER_REPO is the official image repository name at docker.io, quay.io.
|
||||||
|
DOCKER_REPO:= prometheuscommunity
|
||||||
|
|
||||||
|
# ALL_DOCKER_REPOS is the list of repositories to push the image to. ghcr.io requires that org name be the same as the image repo name.
|
||||||
|
ALL_DOCKER_REPOS:=docker.io/$(DOCKER_REPO) quay.io/$(DOCKER_REPO) ghcr.io/prometheus-community
|
||||||
|
|
||||||
VERSION?=$(shell cat VERSION)
|
VERSION?=$(shell cat VERSION)
|
||||||
DOCKER?=docker
|
DOCKER?=docker
|
||||||
|
|
||||||
# Image Variables for Hostprocess Container
|
# Image Variables for Hostprocess Container
|
||||||
# Windows image build is heavily influenced by https://github.com/kubernetes/kubernetes/blob/master/cluster/images/etcd/Makefile
|
# Windows image build is heavily influenced by https://github.com/kubernetes/kubernetes/blob/master/cluster/images/etcd/Makefile
|
||||||
OS=1809
|
OS=ltsc2019
|
||||||
ALL_OS:= 1809 ltsc2022
|
ALL_OS:= ltsc2019 ltsc2022
|
||||||
BASE_IMAGE=mcr.microsoft.com/windows/nanoserver
|
BASE_IMAGE=mcr.microsoft.com/windows/nanoserver
|
||||||
|
BASE_HOST_PROCESS_IMAGE=mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build: generate windows_exporter.exe
|
build: generate windows_exporter.exe
|
||||||
@@ -48,7 +54,7 @@ crossbuild: generate
|
|||||||
GOARCH=arm64 promu build --prefix=output/arm64
|
GOARCH=arm64 promu build --prefix=output/arm64
|
||||||
|
|
||||||
build-image: crossbuild
|
build-image: crossbuild
|
||||||
$(DOCKER) build --build-arg=BASE=$(BASE_IMAGE):$(OS) -f Dockerfile -t $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$(OS) .
|
$(DOCKER) build --build-arg=BASE=$(BASE_IMAGE):$(OS) -f Dockerfile -t local/$(DOCKER_IMAGE_NAME):$(VERSION)-$(OS) .
|
||||||
|
|
||||||
sub-build-%:
|
sub-build-%:
|
||||||
$(MAKE) OS=$* build-image
|
$(MAKE) OS=$* build-image
|
||||||
@@ -58,11 +64,20 @@ build-all: $(addprefix sub-build-,$(ALL_OS))
|
|||||||
push:
|
push:
|
||||||
set -x; \
|
set -x; \
|
||||||
for osversion in ${ALL_OS}; do \
|
for osversion in ${ALL_OS}; do \
|
||||||
|
$(DOCKER) tag local/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion} $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
||||||
$(DOCKER) push $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
$(DOCKER) push $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
||||||
$(DOCKER) manifest create --amend $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
$(DOCKER) manifest create --amend $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
||||||
full_version=`$(DOCKER) manifest inspect $(BASE_IMAGE):$${osversion} | grep "os.version" | head -n 1 | awk -F\" '{print $$4}'` || true; \
|
full_version=`$(DOCKER) manifest inspect $(BASE_IMAGE):$${osversion} | grep "os.version" | head -n 1 | awk -F\" '{print $$4}'` || true; \
|
||||||
$(DOCKER) manifest annotate --os windows --arch amd64 --os-version $${full_version} $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
$(DOCKER) manifest annotate --os windows --arch amd64 --os-version $${full_version} $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)-$${osversion}; \
|
||||||
done
|
done
|
||||||
$(DOCKER) manifest push --purge $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION)
|
$(DOCKER) manifest push --purge $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(VERSION);
|
||||||
|
|
||||||
push-all: build-all push
|
sub-push-%:
|
||||||
|
$(MAKE) DOCKER_REPO=$* push
|
||||||
|
|
||||||
|
push-all: build-all $(addprefix sub-push-,$(ALL_DOCKER_REPOS))
|
||||||
|
|
||||||
|
# Mandatory target for container description sync action
|
||||||
|
.PHONY: docker-repo-name
|
||||||
|
docker-repo-name:
|
||||||
|
@echo "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)"
|
||||||
50
README.md
50
README.md
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
A Prometheus exporter for Windows machines.
|
A Prometheus exporter for Windows machines.
|
||||||
|
|
||||||
|
|
||||||
## Collectors
|
## Collectors
|
||||||
|
|
||||||
Name | Description | Enabled by default
|
Name | Description | Enabled by default
|
||||||
@@ -82,17 +81,17 @@ This can be useful for having different Prometheus servers collect specific metr
|
|||||||
|
|
||||||
windows_exporter accepts flags to configure certain behaviours. The ones configuring the global behaviour of the exporter are listed below, while collector-specific ones are documented in the respective collector documentation above.
|
windows_exporter accepts flags to configure certain behaviours. The ones configuring the global behaviour of the exporter are listed below, while collector-specific ones are documented in the respective collector documentation above.
|
||||||
|
|
||||||
Flag | Description | Default value
|
| Flag | Description | Default value |
|
||||||
---------|-------------|--------------------
|
|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
|
||||||
`--web.listen-address` | host:port for exporter. | `:9182`
|
| `--web.listen-address` | host:port for exporter. | `:9182` |
|
||||||
`--telemetry.path` | URL path for surfacing collected metrics. | `/metrics`
|
| `--telemetry.path` | URL path for surfacing collected metrics. | `/metrics` |
|
||||||
`--telemetry.max-requests` | Maximum number of concurrent requests. 0 to disable. | `5`
|
| `--telemetry.max-requests` | Maximum number of concurrent requests. 0 to disable. | `5` |
|
||||||
`--collectors.enabled` | Comma-separated list of collectors to use. Use `[defaults]` as a placeholder which gets expanded containing all the collectors enabled by default." | `[defaults]`
|
| `--collectors.enabled` | Comma-separated list of collectors to use. Use `[defaults]` as a placeholder which gets expanded containing all the collectors enabled by default." | `[defaults]` |
|
||||||
`--collectors.print` | If true, print available collectors and exit. |
|
| `--collectors.print` | If true, print available collectors and exit. | |
|
||||||
`--scrape.timeout-margin` | Seconds to subtract from the timeout allowed by the client. Tune to allow for overhead or high loads. | `0.5`
|
| `--scrape.timeout-margin` | Seconds to subtract from the timeout allowed by the client. Tune to allow for overhead or high loads. | `0.5` |
|
||||||
`--web.config.file` | A [web config][web_config] for setting up TLS and Auth | None
|
| `--web.config.file` | A [web config][web_config] for setting up TLS and Auth | None |
|
||||||
`--config.file` | [Using a config file](#using-a-configuration-file) from path or URL | None
|
| `--config.file` | [Using a config file](#using-a-configuration-file) from path or URL | None |
|
||||||
`--config.file.insecure-skip-verify` | Skip TLS when loading config file from URL | false
|
| `--config.file.insecure-skip-verify` | Skip TLS when loading config file from URL | false |
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
The latest release can be downloaded from the [releases page](https://github.com/prometheus-community/windows_exporter/releases).
|
The latest release can be downloaded from the [releases page](https://github.com/prometheus-community/windows_exporter/releases).
|
||||||
@@ -101,15 +100,15 @@ Each release provides a .msi installer. The installer will setup the windows_exp
|
|||||||
|
|
||||||
If the installer is run without any parameters, the exporter will run with default settings for enabled collectors, ports, etc. The following parameters are available:
|
If the installer is run without any parameters, the exporter will run with default settings for enabled collectors, ports, etc. The following parameters are available:
|
||||||
|
|
||||||
Name | Description
|
| Name | Description |
|
||||||
-----|------------
|
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
`ENABLED_COLLECTORS` | As the `--collectors.enabled` flag, provide a comma-separated list of enabled collectors
|
| `ENABLED_COLLECTORS` | As the `--collectors.enabled` flag, provide a comma-separated list of enabled collectors |
|
||||||
`LISTEN_ADDR` | The IP address to bind to. Defaults to 0.0.0.0
|
| `LISTEN_ADDR` | The IP address to bind to. Defaults to 0.0.0.0 |
|
||||||
`LISTEN_PORT` | The port to bind to. Defaults to 9182.
|
| `LISTEN_PORT` | The port to bind to. Defaults to 9182. |
|
||||||
`METRICS_PATH` | The path at which to serve metrics. Defaults to `/metrics`
|
| `METRICS_PATH` | The path at which to serve metrics. Defaults to `/metrics` |
|
||||||
`TEXTFILE_DIRS` | As the `--collector.textfile.directories` flag, provide a directory to read text files with metrics from
|
| `TEXTFILE_DIRS` | As the `--collector.textfile.directories` flag, provide a directory to read text files with metrics from |
|
||||||
`REMOTE_ADDR` | Allows setting comma separated remote IP addresses for the Windows Firewall exception (allow list). Defaults to an empty string (any remote address).
|
| `REMOTE_ADDR` | Allows setting comma separated remote IP addresses for the Windows Firewall exception (allow list). Defaults to an empty string (any remote address). |
|
||||||
`EXTRA_FLAGS` | Allows passing full CLI flags. Defaults to an empty string.
|
| `EXTRA_FLAGS` | Allows passing full CLI flags. Defaults to an empty string. |
|
||||||
|
|
||||||
Parameters are sent to the installer via `msiexec`. Example invocations:
|
Parameters are sent to the installer via `msiexec`. Example invocations:
|
||||||
|
|
||||||
@@ -142,6 +141,15 @@ $PSNativeCommandArgumentPassing = 'Legacy'
|
|||||||
msiexec /i <path-to-msi-file> ENABLED_COLLECTORS=os,service --% EXTRA_FLAGS="--collector.service.services-where ""Name LIKE 'sql%'"""
|
msiexec /i <path-to-msi-file> ENABLED_COLLECTORS=os,service --% EXTRA_FLAGS="--collector.service.services-where ""Name LIKE 'sql%'"""
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Docker Implementation
|
||||||
|
|
||||||
|
The windows_exporter can be run as a Docker container. The Docker image is available on
|
||||||
|
|
||||||
|
* [Docker Hub](https://hub.docker.com/r/prometheuscommunity/windows-exporter): `ghcr.io/prometheus-community/windows-exporter`
|
||||||
|
* [GitHub Container Registry](https://github.com/prometheus-community/windows_exporter/pkgs/container/windows-exporter): `docker.io/prometheuscommunity/windows-exporter`
|
||||||
|
* [quay.io Registry](https://quay.io/repository/prometheuscommunity/windows-exporter): `quay.io/prometheuscommunity/windows-exporter`
|
||||||
|
|
||||||
|
|
||||||
## Kubernetes Implementation
|
## Kubernetes Implementation
|
||||||
|
|
||||||
See detailed steps to install on Windows Kubernetes [here](./kubernetes/kubernetes.md).
|
See detailed steps to install on Windows Kubernetes [here](./kubernetes/kubernetes.md).
|
||||||
|
|||||||
Reference in New Issue
Block a user