Add prometheus addons
This commit is contained in:
parent
7cb5adbcf7
commit
5bd412f18a
0
addon-prometheus-main/.gitignore
vendored
Normal file
0
addon-prometheus-main/.gitignore
vendored
Normal file
1
addon-prometheus-main/.mdlrc
Normal file
1
addon-prometheus-main/.mdlrc
Normal file
@ -0,0 +1 @@
|
||||
rules "~MD024"
|
66
addon-prometheus-main/.yamllint
Normal file
66
addon-prometheus-main/.yamllint
Normal file
@ -0,0 +1,66 @@
|
||||
---
|
||||
rules:
|
||||
braces:
|
||||
level: error
|
||||
min-spaces-inside: 0
|
||||
max-spaces-inside: 1
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
brackets:
|
||||
level: error
|
||||
min-spaces-inside: 0
|
||||
max-spaces-inside: 0
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
colons:
|
||||
level: error
|
||||
max-spaces-before: 0
|
||||
max-spaces-after: 1
|
||||
commas:
|
||||
level: error
|
||||
max-spaces-before: 0
|
||||
min-spaces-after: 1
|
||||
max-spaces-after: 1
|
||||
comments:
|
||||
level: error
|
||||
require-starting-space: true
|
||||
min-spaces-from-content: 2
|
||||
comments-indentation:
|
||||
level: error
|
||||
document-end:
|
||||
level: error
|
||||
present: false
|
||||
document-start:
|
||||
level: error
|
||||
present: true
|
||||
empty-lines:
|
||||
level: error
|
||||
max: 1
|
||||
max-start: 0
|
||||
max-end: 1
|
||||
hyphens:
|
||||
level: error
|
||||
max-spaces-after: 1
|
||||
indentation:
|
||||
level: error
|
||||
spaces: 2
|
||||
indent-sequences: true
|
||||
check-multi-line-strings: false
|
||||
key-duplicates:
|
||||
level: error
|
||||
line-length:
|
||||
ignore: |
|
||||
.github/support.yml
|
||||
level: warning
|
||||
max: 120
|
||||
allow-non-breakable-words: true
|
||||
allow-non-breakable-inline-mappings: true
|
||||
new-line-at-end-of-file:
|
||||
level: error
|
||||
new-lines:
|
||||
level: error
|
||||
type: unix
|
||||
trailing-spaces:
|
||||
level: error
|
||||
truthy:
|
||||
level: error
|
21
addon-prometheus-main/LICENSE.md
Normal file
21
addon-prometheus-main/LICENSE.md
Normal file
@ -0,0 +1,21 @@
|
||||
# MIT License
|
||||
|
||||
Copyright (c) 2020-2022 Robbert Müller
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
117
addon-prometheus-main/README.md
Normal file
117
addon-prometheus-main/README.md
Normal file
@ -0,0 +1,117 @@
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
|
||||
[![GitHub Release][releases-shield]][releases]
|
||||
![Project Stage][project-stage-shield]
|
||||
[![License][license-shield]](LICENSE.md)
|
||||
|
||||
![Supports aarch64 Architecture][aarch64-shield]
|
||||
![Supports amd64 Architecture][amd64-shield]
|
||||
![Supports armhf Architecture][armhf-shield]
|
||||
![Supports armv7 Architecture][armv7-shield]
|
||||
![Supports i386 Architecture][i386-shield]
|
||||
|
||||
[![GitLab CI][gitlabci-shield]][gitlabci]
|
||||
![Project Maintenance][maintenance-shield]
|
||||
[![GitHub Activity][commits-shield]][commits]
|
||||
|
||||
[![Discord][discord-shield]][discord]
|
||||
[![Community Forum][forum-shield]][forum]
|
||||
|
||||
The open platform for beautiful analytics and monitoring.
|
||||
|
||||
![Prometheus in the Home Assistant Frontend](images/screenshot.png)
|
||||
|
||||
## About
|
||||
|
||||
....
|
||||
|
||||
[:books: Read the full add-on documentation][docs]
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Contributing
|
||||
|
||||
This is an active open-source project. We are always open to people who want to
|
||||
use the code or contribute to it.
|
||||
|
||||
We have set up a separate document containing our
|
||||
[contribution guidelines](.github/CONTRIBUTING.md).
|
||||
|
||||
Thank you for being involved! :heart_eyes:
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Robbert Müller][mjrider]
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## We have got some Home Assistant add-ons for you
|
||||
|
||||
Want some more functionality to your Home Assistant instance?
|
||||
|
||||
We have created multiple add-ons for Home Assistant. For a full list, check out
|
||||
our [GitHub Repository][repository].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2022 Robbert Müller
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
|
||||
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
|
||||
[armhf-shield]: https://img.shields.io/badge/armhf-no-red.svg
|
||||
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
|
||||
[commits-shield]: https://img.shields.io/github/commit-activity/y/hassio-addons/addon-prometheus.svg
|
||||
[commits]: https://github.com/hassio-addons/addon-prometheus/commits/main
|
||||
[contributors]: https://github.com/hassio-addons/addon-prometheus/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[docs]: https://github.com/hassio-addons/addon-prometheus/blob/main/prometheus/DOCS.md
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://example.net
|
||||
[mjrider]: https://github.com/mjrider
|
||||
[gitlabci-shield]: https://gitlab.com/hassio-addons/addon-prometheus/badges/master/pipeline.svg
|
||||
[gitlabci]: https://gitlab.com/hassio-addons/addon-prometheus/pipelines
|
||||
[i386-shield]: https://img.shields.io/badge/i386-no-red.svg
|
||||
[issue]: https://github.com/hassio-addons/addon-prometheus/issues
|
||||
[license-shield]: https://img.shields.io/github/license/hassio-addons/addon-prometheus.svg
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2022.svg
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-Development-yellowgreen.svg
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases-shield]: https://img.shields.io/github/release/hassio-addons/addon-prometheus.svg
|
||||
[releases]: https://github.com/hassio-addons/addon-prometheus/releases
|
||||
[repository]: https://github.com/hassio-addons/repository
|
BIN
addon-prometheus-main/images/screenshot.png
Normal file
BIN
addon-prometheus-main/images/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 104 KiB |
62
addon-prometheus-main/prometheus/.README.j2
Normal file
62
addon-prometheus-main/prometheus/.README.j2
Normal file
@ -0,0 +1,62 @@
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
The open platform for beautiful analytics and monitoring.
|
||||
|
||||
## About
|
||||
|
||||
...
|
||||
|
||||
![Prometheus in the Home Assistant Frontend][screenshot]
|
||||
|
||||
{% if channel == "edge" %}
|
||||
## WARNING! THIS IS AN EDGE VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains edge builds of add-ons.
|
||||
Edge builds add-ons are based upon the latest development version.
|
||||
|
||||
- They may not work at all.
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
- Developers.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
{% if channel == "beta" %}
|
||||
## WARNING! THIS IS A BETA VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains beta releases of add-ons.
|
||||
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://example.org
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2022.svg
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-Development-yellowgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
|
||||
[release]: {{ repo }}/tree/{{ version }}
|
||||
[screenshot]: https://github.com/hassio-addons/addon-prometheus/raw/master/images/screenshot.png
|
131
addon-prometheus-main/prometheus/DOCS.md
Normal file
131
addon-prometheus-main/prometheus/DOCS.md
Normal file
@ -0,0 +1,131 @@
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
|
||||
....
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the "Prometheus" add-on in the Supervisor add-on store.
|
||||
1. Install the "Prometheus" add-on.
|
||||
1. Start the "Prometheus" add-on.
|
||||
1. Check the logs of the "Prometheus" to see if everything went well.
|
||||
1. Open the Web UI.
|
||||
|
||||
**Note**: The addon supports both Ingress and direct access, this is the default
|
||||
|
||||
## Configuration
|
||||
|
||||
There are no configuration options for the addon.
|
||||
|
||||
To add additional scrape targets you need to create a file per target in /share/prometheus/targets.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
---
|
||||
job_name: "octoprint"
|
||||
scrape_interval: 5s
|
||||
metrics_path: "/plugin/prometheus_exporter/metrics"
|
||||
params:
|
||||
apikey: ["VERYSECRETAPIKEY"]
|
||||
static_configs:
|
||||
- targets: ["octoprint.example.org:5000"]
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||
|
||||
The job names `home-assistant` and `prometheus` are already defined by default.
|
||||
For the `homeassistant` target you must add add the following to
|
||||
the Home Assistant configuration:
|
||||
|
||||
```yaml
|
||||
prometheus:
|
||||
```
|
||||
|
||||
Rules can be created under `/share/prometheus/rules/`
|
||||
|
||||
The addon will reload the configuration if a valid configuration is available.
|
||||
If not it will log errors in the addon log
|
||||
|
||||
## Grafana
|
||||
|
||||
Grafana can use prometheus as a datasource, to configure this go to grafana
|
||||
and add a datasource.
|
||||
The hostname to connect to is depending on the release you installed.
|
||||
For stable this is `http://a0d7b954-prometheus:9090`
|
||||
|
||||
## Known issues and limitations
|
||||
|
||||
- Job name must be unique, but this has to be enforced by the user.
|
||||
- no alert manager yet
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Robbert Müller][mjrider].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2022 Robbert Müller
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[contributors]: https://github.com/hassio-addons/addon-Prometheus/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://example.net
|
||||
[mjrider]: https://github.com/mjrider
|
||||
[issue]: https://github.com/hassio-addons/addon-prometheus/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-prometheus/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
76
addon-prometheus-main/prometheus/Dockerfile
Normal file
76
addon-prometheus-main/prometheus/Dockerfile
Normal file
@ -0,0 +1,76 @@
|
||||
ARG BUILD_FROM=ghcr.io/hassio-addons/base:16.3.4
|
||||
# hadolint ignore=DL3006
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
# Set shell
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
# Setup base system
|
||||
ARG BUILD_ARCH=amd64
|
||||
ENV PROMETHEUS_VERSION=2.55.0
|
||||
|
||||
# Copy root filesystem
|
||||
COPY rootfs /
|
||||
|
||||
# hadolint ignore=DL3003
|
||||
RUN \
|
||||
ARCH="${BUILD_ARCH}" \
|
||||
&& if [ "${BUILD_ARCH}" = "aarch64" ]; then ARCH="arm64"; fi \
|
||||
\
|
||||
&& apk --no-cache add \
|
||||
python3=3.10.5-r0 \
|
||||
py3-idna=3.3-r2 \
|
||||
py3-certifi=2021.10.8-r0 \
|
||||
py3-chardet=4.0.0-r3 \
|
||||
py3-yaml=6.0-r0 \
|
||||
py3-urllib3=1.26.9-r0 \
|
||||
py3-requests=2.27.1-r0 \
|
||||
&& apk --no-cache add --virtual .builddeps \
|
||||
py-pip=22.1.1-r0 \
|
||||
\
|
||||
&& curl -J -L -o /tmp/prometheus.tar.gz \
|
||||
"https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}.tar.gz" \
|
||||
&& adduser -s /bin/false -D -H prometheus \
|
||||
&& cd /tmp \
|
||||
&& tar -xvf /tmp/prometheus.tar.gz \
|
||||
&& mkdir -p /etc/prometheus \
|
||||
&& cp prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}/promtool /usr/local/bin/ \
|
||||
&& cp prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}/prometheus /usr/local/bin/ \
|
||||
&& cp -R prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}/console_libraries/ /etc/prometheus/ \
|
||||
&& cp -R prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}/consoles/ /etc/prometheus/ \
|
||||
&& rm -r prometheus-${PROMETHEUS_VERSION}.linux-${ARCH} \
|
||||
&& chown -R prometheus:prometheus /etc/prometheus \
|
||||
&& pip3 install \
|
||||
--no-cache-dir \
|
||||
--prefer-binary \
|
||||
--find-links "https://wheels.home-assistant.io/alpine-3.15/${BUILD_ARCH}/" \
|
||||
-r /opt/prometheus-configgen/requirements.txt \
|
||||
\
|
||||
&& apk --no-cache del .builddeps \
|
||||
&& rm -f -r \
|
||||
/tmp/*
|
||||
|
||||
# Build arguments
|
||||
ARG BUILD_DATE
|
||||
ARG BUILD_REF
|
||||
ARG BUILD_VERSION
|
||||
|
||||
# Labels
|
||||
LABEL \
|
||||
io.hass.name="Prometheus" \
|
||||
io.hass.description="Cloud native metrics" \
|
||||
io.hass.arch="${BUILD_ARCH}" \
|
||||
io.hass.type="addon" \
|
||||
io.hass.version=${BUILD_VERSION} \
|
||||
maintainer="feres" \
|
||||
org.opencontainers.image.title="Prometheus" \
|
||||
org.opencontainers.image.description="Cloud native metrics" \
|
||||
org.opencontainers.image.vendor="Home Assistant local Add-ons" \
|
||||
org.opencontainers.image.authors="Feres" \
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
org.opencontainers.image.url="https://addons.community" \
|
||||
org.opencontainers.image.source="https://github.com/hassio-addons/addon-prometheus" \
|
||||
org.opencontainers.image.documentation="https://github.com/hassio-addons/addon-prometheus/blob/master/README.md" \
|
||||
org.opencontainers.image.created=${BUILD_DATE} \
|
||||
org.opencontainers.image.revision=${BUILD_REF} \
|
||||
org.opencontainers.image.version=${BUILD_VERSION}
|
8
addon-prometheus-main/prometheus/build.yaml
Normal file
8
addon-prometheus-main/prometheus/build.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
build_from:
|
||||
aarch64: ghcr.io/hassio-addons/base:16.3.4
|
||||
amd64: ghcr.io/hassio-addons/base:16.3.4
|
||||
armv7: ghcr.io/hassio-addons/base:16.3.4
|
||||
codenotary:
|
||||
base_image: codenotary@frenck.dev
|
||||
signer: codenotary@frenck.dev
|
26
addon-prometheus-main/prometheus/config.yaml
Normal file
26
addon-prometheus-main/prometheus/config.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
name: Prometheus
|
||||
version: dev
|
||||
slug: prometheus
|
||||
description: Cloud native metrics
|
||||
url: https://github.com/hassio-addons/addon-prometheus
|
||||
codenotary: codenotary@frenck.dev
|
||||
startup: services
|
||||
ingress: true
|
||||
ingress_port: 9090
|
||||
ingress_entry: graph
|
||||
init: false
|
||||
panel_icon: mdi:chart-timeline
|
||||
panel_title: Prometheus
|
||||
arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
- armv7
|
||||
hassio_api: true
|
||||
homeassistant_api: true
|
||||
map:
|
||||
- share:rw
|
||||
ports:
|
||||
9090/tcp: null
|
||||
ports_description:
|
||||
9090/tcp: Not required for Ingress
|
BIN
addon-prometheus-main/prometheus/icon.png
Normal file
BIN
addon-prometheus-main/prometheus/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
addon-prometheus-main/prometheus/logo.png
Normal file
BIN
addon-prometheus-main/prometheus/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,10 @@
|
||||
#!/command/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
# Configures Prometheus
|
||||
# ==============================================================================
|
||||
echo "${SUPERVISOR_TOKEN}" > '/run/home-assistant.token'
|
||||
|
||||
mkdir -p /data/prometheus
|
||||
find /data/prometheus -not -perm 0644 -type f -exec chmod 0660 {} \;
|
||||
find /data/prometheus -not -perm 0755 -type d -exec chmod 0770 {} \;
|
@ -0,0 +1,40 @@
|
||||
---
|
||||
# my global config
|
||||
global:
|
||||
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
||||
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
|
||||
# scrape_timeout is set to the global default (10s).
|
||||
|
||||
# Alertmanager configuration
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets:
|
||||
# - alertmanager:9093
|
||||
|
||||
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
|
||||
rule_files:
|
||||
- "/share/prometheus/rules/*.yml"
|
||||
- "/share/prometheus/rules/*.yaml"
|
||||
|
||||
# A scrape configuration containing exactly one endpoint to scrape:
|
||||
# Here it's Prometheus itself.
|
||||
scrape_configs:
|
||||
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
|
||||
- job_name: "prometheus"
|
||||
|
||||
# metrics_path defaults to '/metrics'
|
||||
# scheme defaults to 'http'.
|
||||
|
||||
static_configs:
|
||||
- targets: ["localhost:9090"]
|
||||
- job_name: "home-assistant"
|
||||
scrape_interval: 60s
|
||||
metrics_path: /core/api/prometheus
|
||||
|
||||
# Long-Lived Access Token
|
||||
bearer_token_file: "/run/home-assistant.token"
|
||||
|
||||
scheme: http
|
||||
static_configs:
|
||||
- targets: ["supervisor:80"]
|
@ -0,0 +1,11 @@
|
||||
#!/command/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
# Take down the S6 supervision tree when Prometheus fails
|
||||
# ==============================================================================
|
||||
if [[ "${1}" -ne 0 ]] && [[ "${1}" -ne 256 ]]; then
|
||||
bashio::log.warning "Prometheus config crashed, halting add-on"
|
||||
exec /run/s6/basedir/bin/halt
|
||||
fi
|
||||
|
||||
bashio::log.info "Prometheus config stopped, restarting..."
|
@ -0,0 +1,13 @@
|
||||
#!/command/with-contenv bashio
|
||||
bashio::log.info 'Starting prometheus config generator...'
|
||||
|
||||
if ! bashio::fs.directory_exists /share/prometheus/targets; then
|
||||
mkdir -p /share/prometheus/targets
|
||||
chown -R prometheus:prometheus /share/prometheus/targets
|
||||
fi
|
||||
|
||||
cd /opt/prometheus-configgen || bashio::exit.nok \
|
||||
"Could not change working directory for prometheus-configgen."
|
||||
|
||||
# Run Prometheus
|
||||
exec s6-setuidgid prometheus python3 combiner
|
@ -0,0 +1,11 @@
|
||||
#!/command/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
# Take down the S6 supervision tree when Prometheus fails
|
||||
# ==============================================================================
|
||||
if [[ "${1}" -ne 0 ]] && [[ "${1}" -ne 256 ]]; then
|
||||
bashio::log.warning "Prometheus crashed, halting add-on"
|
||||
exec /run/s6/basedir/bin/halt
|
||||
fi
|
||||
|
||||
bashio::log.info "Prometheus stopped, restarting..."
|
@ -0,0 +1,45 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck disable=SC2191
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Prometheus
|
||||
# Runs the Prometheus Server
|
||||
# ==============================================================================
|
||||
declare -a options
|
||||
declare name
|
||||
declare value
|
||||
|
||||
bashio::log.info 'Starting prometheus...'
|
||||
|
||||
options+=(--config.file="/etc/prometheus/prometheus.yml" )
|
||||
options+=(--storage.tsdb.path="/data/prometheus" )
|
||||
options+=(--web.console.libraries="/usr/share/prometheus/console_libraries" )
|
||||
options+=(--web.console.templates="/usr/share/prometheus/consoles" )
|
||||
options+=(--web.route-prefix="/" )
|
||||
options+=(--web.external-url="http://localhost:9090$(bashio::addon.ingress_entry)/" )
|
||||
options+=(--web.enable-lifecycle )
|
||||
|
||||
# Load custom environment variables
|
||||
for var in $(bashio::config 'env_vars|keys'); do
|
||||
name=$(bashio::config "env_vars[${var}].name")
|
||||
value=$(bashio::config "env_vars[${var}].value")
|
||||
bashio::log.info "Setting ${name} to ${value}"
|
||||
export "${name}=${value}"
|
||||
done
|
||||
|
||||
if ! bashio::fs.directory_exists /data/prometheus; then
|
||||
mkdir -p /data/prometheus
|
||||
chown prometheus:prometheus /data/prometheus
|
||||
fi
|
||||
|
||||
if ! bashio::fs.directory_exists /share/prometheus/rules; then
|
||||
mkdir -p /share/prometheus/rules
|
||||
chown -R prometheus:prometheus /share/prometheus/rules
|
||||
fi
|
||||
|
||||
if ! bashio::fs.directory_exists /share/prometheus/targets; then
|
||||
mkdir -p /share/prometheus/targets
|
||||
chown -R prometheus:prometheus /share/prometheus/targets
|
||||
fi
|
||||
|
||||
# Run Prometheus
|
||||
exec s6-setuidgid prometheus /usr/local/bin/prometheus "${options[@]}"
|
@ -0,0 +1,100 @@
|
||||
import sys
|
||||
import asyncio
|
||||
import aionotify
|
||||
import yaml
|
||||
import os
|
||||
import tempfile
|
||||
import requests
|
||||
|
||||
from yamlinclude import YamlIncludeConstructor
|
||||
|
||||
|
||||
def generateConfig():
|
||||
YamlIncludeConstructor.add_to_loader_class(
|
||||
loader_class=yaml.FullLoader, base_dir="/share/prometheus/"
|
||||
)
|
||||
|
||||
with open("prometheus.template") as f:
|
||||
data = yaml.load(f, Loader=yaml.FullLoader)
|
||||
|
||||
data["scrape_configs"] = (
|
||||
data[".scrape_configs_static"] + data[".scrape_configs_included"]
|
||||
)
|
||||
del data[".scrape_configs_static"]
|
||||
del data[".scrape_configs_included"]
|
||||
return yaml.dump(data, default_flow_style=False, default_style="")
|
||||
|
||||
|
||||
def testConfig(config):
|
||||
tmp = None
|
||||
result = False
|
||||
try:
|
||||
tmp = tempfile.NamedTemporaryFile()
|
||||
with open(tmp.name, "w") as f:
|
||||
f.write(config)
|
||||
r = os.system("promtool check config " + tmp.name + "> /dev/null")
|
||||
result = r == 0
|
||||
except:
|
||||
print("Failed to validate")
|
||||
raise
|
||||
if not result:
|
||||
raise Exception("validation error")
|
||||
return result
|
||||
|
||||
|
||||
def writeConfig(config, file):
|
||||
try:
|
||||
with open(file, "w") as f:
|
||||
f.write(config)
|
||||
r = requests.post(url="http://localhost:9090/-/reload", data={})
|
||||
except:
|
||||
print("Exception")
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
paths_to_watch = ["/share/prometheus/targets/"]
|
||||
|
||||
lock = asyncio.Lock()
|
||||
|
||||
|
||||
async def compile():
|
||||
if lock.locked() == False:
|
||||
await lock.acquire()
|
||||
try:
|
||||
config = generateConfig()
|
||||
testConfig(config)
|
||||
writeConfig(config, "/etc/prometheus/prometheus.yml")
|
||||
print("Compiled")
|
||||
except:
|
||||
pass
|
||||
finally:
|
||||
lock.release()
|
||||
|
||||
|
||||
async def watcher():
|
||||
asyncio.create_task(compile())
|
||||
filewatch = aionotify.Watcher()
|
||||
for path in paths_to_watch:
|
||||
filewatch.watch(
|
||||
path,
|
||||
aionotify.Flags.MODIFY | aionotify.Flags.CREATE | aionotify.Flags.DELETE,
|
||||
)
|
||||
print(path)
|
||||
await filewatch.setup(loop)
|
||||
while True:
|
||||
event = await filewatch.get_event()
|
||||
sys.stdout.write("Got event: %s\n" % repr(event))
|
||||
asyncio.create_task(compile())
|
||||
filewatch.close()
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
loop.run_until_complete(watcher())
|
||||
finally:
|
||||
# loop.close()
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -0,0 +1,38 @@
|
||||
---
|
||||
# my global config
|
||||
global:
|
||||
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
||||
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
|
||||
# scrape_timeout is set to the global default (10s).
|
||||
|
||||
# Alertmanager configuration
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets:
|
||||
# - alertmanager:9093
|
||||
|
||||
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
|
||||
rule_files:
|
||||
- "/share/prometheus/rules/*.yaml"
|
||||
|
||||
|
||||
.scrape_configs_included: !include targets/*.yaml
|
||||
.scrape_configs_static:
|
||||
- job_name: 'home-assistant'
|
||||
scrape_interval: 60s
|
||||
metrics_path: /core/api/prometheus
|
||||
|
||||
# Long-Lived Access Token
|
||||
bearer_token_file: '/run/home-assistant.token'
|
||||
|
||||
scheme: http
|
||||
static_configs:
|
||||
- targets: ['supervisor:80']
|
||||
- job_name: 'prometheus'
|
||||
|
||||
# metrics_path defaults to '/metrics'
|
||||
# scheme defaults to 'http'.
|
||||
|
||||
static_configs:
|
||||
- targets: ['localhost:9090']
|
@ -0,0 +1,4 @@
|
||||
aionotify
|
||||
pyyaml-include>=1.2
|
||||
PyYAML>=5.3.1
|
||||
requests>=2.23.0
|
Loading…
x
Reference in New Issue
Block a user