From c8040b397187860fd9229654c5e8109b194a0a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franc=CC=A7ois=20Bonelle?= Date: Fri, 25 Aug 2023 01:17:31 +0200 Subject: [PATCH] Add promtail Upgrade telegraf Upgrade docker-socket-proxy --- .DS_Store | Bin 6148 -> 6148 bytes docker-socket-proxy/build.yaml | 14 +- docker-socket-proxy/config.yaml | 2 +- docker-socket-proxy/icon.png | Bin 0 -> 11334 bytes docker-socket-proxy/logo.png | Bin 0 -> 23383 bytes promtail/DOCS.md | 327 ++++++++++++++++++ promtail/Dockerfile | 60 ++++ promtail/apparmor.txt | 116 +++++++ promtail/build.yaml | 9 + promtail/config.yaml | 39 +++ promtail/icon.png | Bin 0 -> 19951 bytes promtail/logo.png | Bin 0 -> 15536 bytes .../rootfs/etc/cont-init.d/promtail_setup.sh | 129 +++++++ promtail/rootfs/etc/promtail/base_config.yaml | 11 + .../etc/promtail/default-scrape-config.yaml | 27 ++ .../rootfs/etc/services.d/promtail/finish | 15 + promtail/rootfs/etc/services.d/promtail/run | 40 +++ telegraf/build.yaml | 12 +- telegraf/config.yaml | 2 +- telegraf/icon.png | Bin 0 -> 18952 bytes telegraf/logo.png | Bin 0 -> 17816 bytes 21 files changed, 788 insertions(+), 15 deletions(-) create mode 100644 docker-socket-proxy/icon.png create mode 100644 docker-socket-proxy/logo.png create mode 100644 promtail/DOCS.md create mode 100644 promtail/Dockerfile create mode 100644 promtail/apparmor.txt create mode 100644 promtail/build.yaml create mode 100644 promtail/config.yaml create mode 100644 promtail/icon.png create mode 100644 promtail/logo.png create mode 100755 promtail/rootfs/etc/cont-init.d/promtail_setup.sh create mode 100644 promtail/rootfs/etc/promtail/base_config.yaml create mode 100644 promtail/rootfs/etc/promtail/default-scrape-config.yaml create mode 100755 promtail/rootfs/etc/services.d/promtail/finish create mode 100755 promtail/rootfs/etc/services.d/promtail/run create mode 100644 telegraf/icon.png create mode 100644 telegraf/logo.png diff --git a/.DS_Store b/.DS_Store index 1c18b2d62bb938113d16c3c4f455461066195847..08ee44031a41d8fbdf1b70c9d6ddbbc76fda3863 100644 GIT binary patch delta 185 zcmZoMXffE}$Rf5qsURn_xWvHV8Y2@k3o9EtJ109g`{ZzzFda@#4$gQ1@#<=GQym3M z^I9E+YC~fqa~%Z>6Z6_yP7YCJee0n3?3~=Z{Laa@SmYVICiAdpO;%ymrn0F9tRkCb N*j_VkX65+L4*-RIF5LhC delta 183 zcmZoMXffE}$Rf5QsURn_xWvHV8Y2@k3o9Et2RjEh$K-I9FkKE#4$gQ1iRx-2Q%fBM zV`GC_9ffL3BLf`;6JxX5T22m8Wqs?Q`0SkAy!@`oH(BHvyC?IoXiZjT)uytso7vd@ LGj3+*_{$Ff73nTY diff --git a/docker-socket-proxy/build.yaml b/docker-socket-proxy/build.yaml index e18b409..96519d3 100644 --- a/docker-socket-proxy/build.yaml +++ b/docker-socket-proxy/build.yaml @@ -1,9 +1,9 @@ build_from: - aarch64: ghcr.io/hassio-addons/base:14.0.2 - amd64: ghcr.io/hassio-addons/base:14.0.2 - armhf: ghcr.io/hassio-addons/base:14.0.2 - armv7: ghcr.io/hassio-addons/base:14.0.2 - i386: ghcr.io/hassio-addons/base:14.0.2 + aarch64: ghcr.io/hassio-addons/base:14.1.0 + amd64: ghcr.io/hassio-addons/base:14.1.0 + armhf: ghcr.io/hassio-addons/base:14.1.0 + armv7: ghcr.io/hassio-addons/base:14.1.0 + i386: ghcr.io/hassio-addons/base:14.1.0 args: - HAPROXY_VERSION: 2.8.1 - HAPROXY_SHA256: 485552fcd9d5d5f41aad046f131fc0a7e849bef25a349a040750af0c6fc56807 \ No newline at end of file + HAPROXY_VERSION: 2.8.2 + HAPROXY_SHA256: 698d6906d170946a869769964e57816ba3da3adf61ff75e89972b137f4658db0 \ No newline at end of file diff --git a/docker-socket-proxy/config.yaml b/docker-socket-proxy/config.yaml index e72ddee..0e41a9d 100644 --- a/docker-socket-proxy/config.yaml +++ b/docker-socket-proxy/config.yaml @@ -1,6 +1,6 @@ --- name: Docker-Socket-Proxy -version: 2.8.1 +version: 2.8.2 slug: hassio_docker_socket_proxy description: An addon to enable TCP docker access. url: https://gitea.bonelle-family.dscloud.biz/francois.bonelle/hassio-repo.git diff --git a/docker-socket-proxy/icon.png b/docker-socket-proxy/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..09622576e9243b0925a1593cc89c6953eff2b66c GIT binary patch literal 11334 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:@logs-prod-us-central1.grafana.net/api/prom/push` +([see here for more info][grafana-cloud-docs-promtail]). + +### Option: `client.username` + +The username to use if you require basic auth to connect to your Loki deployment. + +### Option: `client.password` + +The password for the username you choose if you require basic auth to connect to +your Loki deployment. **Note**: This field is required if `client.username` is +provided. + +### Option: `client.cafile` + +The CA certificate used to sign Loki's certificate if Loki is using a self-signed +certificate for SSL. + +**Note**: _The file MUST be stored in `/ssl/`, which is the default_ + +### Option: `client.servername` + +The servername listed on the certificate Loki is using if using SSL to connect +by a different URL then what's on Loki's certificate (usually if the certificate +lists a public URL and you're connecting locally). + +### Option: `client.certfile` + +The absolute path to a certificate for client-authentication if Loki is using +mTLS to authenticate clients. + +### Option: `client.keyfile` + +The absolute path to the key for the client-authentication certificate if Loki +is using mTLS to authenticate clients. **Note**: This field is required if +`client.certfile` is provided + +### Option: `additional_pipeline_stages` + +The absolute path to a YAML file with a list of additional pipeline stages to +apply to the [default journal scrape config][addon-default-config]. The primary +use of this is to apply additional processing to logs from particular add-ons +you use if they are noisy or difficult to read. + +This file must contain only a YAML list of pipeline stages. They will be added +to the end of the ones already listed. If you don't like the ones listed, use +`skip_default_scrape_config` and `additional_scrape_configs` to write your own +instead. Here's an example of the contents of this file: + +```yaml +- match: + selector: '{container_name="addon_cebe7a76_hassio_google_drive_backup"}' + stages: + - multiline: + firstline: '^\x{001b}' +``` + +This particular example applies to the [google drive backup addon][addon-google-drive-backup]. +It uses the same log format as Home Assistant and outputs the escape character +at the start of each log line for color-coding in terminals. Looking for that +in a multiline stage makes it so tracebacks are included in the same log entry +as the error that caused them for easier readability. + +See the [promtail documentation][promtail-doc-stages] for more information on how +to configure pipeline stages. + +**Note**: This addon has access to `/ssl`, `/share` and `/config/promtail`. Place +the file in one of these locations, others will not work. + +### Option: `skip_default_scrape_config` + +Promtail will scrape the `systemd journal` using a pre-defined config you can +find [here][addon-default-config]. If you only want it to look at specific log +files you specify or you don't like the default config and want to adjust it, set +this to `true`. Then the only scrape configs used will be the ones you specify +in the `additional_scrape_configs` file. + +**Note**: This addon has access to `/ssl`, `/share` and `/config/promtail`. Place +the file in one of these locations, others will not work. + +### Option: `additional_scrape_configs` + +The absolute path to a YAML file with a list of additional scrape configs for +Promtail to use. The primary use of this is to point Promtail at additional log +files created by add-ons which don't use `stdout` for all logging. You an also +change the system journal is scraped by using this in conjunction with +`skip_default_scrape_config`. **Note**: If `skip_default_scrape_config` is `true` +then this field becomes required (otherwise there would be no scrape configs) + +The file must contain only a YAML list of scrape configs. Here's an example of +the contents of this file: + +```yaml +- job_name: zigbee2mqtt_messages + pipeline_stages: + static_configs: + - targets: + - localhost + labels: + job: zigbee2mqtt_messages + __path__: /share/zigbee2mqtt/log/**.txt +``` + +This particular example would cause Promtail to scrape up the logs MQTT that the +[Zigbee2MQTT add-on][addon-z2m] makes by default. + +Promtail provides a lot of options for configuring scrape configs. See the +documentation on [scrape_configs][promtail-doc-scrape-configs] for more info on +the options available and how to configure them. The documentation also provides +[other examples][promtail-doc-examples] you can use. + +I would also recommend reading the [Loki best practices][loki-doc-best-practices] +guide before making custom scrape configs. Pipelines are pretty powerful but +avoid making too many labels, it does more harm then good. Instead look into +what you can do with [LogQL][logql] can do at the other end. + +**Note**: This addon has access to `/ssl`, `/share` and `/config/promtail`. Place +the file in one of these locations, others will not work. + +### Port: `9080/tcp` + +Promtail expose an [API][api] on this port. This is primarily used for healthchecks +by the supervisor watchdog which does not require exposing it on the host. Most +users should leave this option disabled unless you have an external application +doing healthchecks. + +For advanced users creating custom scrape configs the other purpose of this API +is to expose metrics created by the [metrics][promtail-doc-metrics] pipeline +stage. Exposing this port would then allow you to read those metrics from another +system on your network. + +### Option: `log_level` + +The `log_level` option controls the level of log output by the addon and can +be changed to be more or less verbose, which might be useful when you are +dealing with an unknown issue. Possible values are: + +- `debug`: Shows detailed debug information. +- `info`: Normal (usually) interesting events. +- `warning`: Exceptional occurrences that are not errors. +- `error`: Runtime errors that do not require immediate action. + +Please note that each level automatically includes log messages from a +more severe level, e.g., `debug` also shows `info` messages. By default, +the `log_level` is set to `info`, which is the recommended setting unless +you are troubleshooting. + +## PLG Stack (Promtail, Loki and Grafana) + +Promtail isn't a standalone application, it's job is to find logs, process them +and ship them to Loki. Most likely you want the full PLG stack: + +- Promtail to process and ship logs +- Loki to aggregate and index them +- Grafana to visualize and monitor them + +### Loki + +The easiest way to get started is to also install the Loki add-on in this same +repository. By default this add-on is set up to collect all logs from the system +journal and ship them over to that add-on. If that's what you want there is no +additional configuration required for either. + +[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon-loki] + +Alternatively you can deploy Loki somewhere else. Take a look at the +[Loki documentation][loki-doc] for info on setting up a Loki deployment and +connecting Promtail to it. + +### Grafana + +Once you have Loki and Promtail set up you will probably want to connect to it +from [Grafana][grafana]. The easiest way to do that is to use the +[Grafana community add-on][addon-grafana]. From there you can find Loki in the +list of data sources and configure the connection (see [Loki in Grafana][loki-in-grafana]). +If you did choose to use the Loki add-on you can find additional instructions in +[the add-on's documentation][addon-loki-doc]. + +[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon-grafana] + +### Grafana Cloud + +If you prefer, you can also use Grafana's cloud service, +[see here](https://grafana.com/products/cloud/) on how to get started. This +service takes the place of both Loki and Grafana in the PLG stack, you just +point Promtail at it and you're done. To do this, first create an account then +[review this guide][grafana-cloud-docs-promtail] to see how to connect Promtail +to your account. Essentially its just a different URL since the credential information +goes in the URL. + +## 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 ways to get them answered: + +- The Home Assistant [Community Forum][forum]. I am + [CentralCommand][forum-centralcommand] there. +- The Home Assistant [Discord Chat Server][discord-ha]. Use the #add-ons channel, + I am CentralCommand#0913 there. + +You could also [open an issue here][issue] on GitHub. + +## Authors & contributors + +The original setup of this repository is by [Mike Degatano][mdegat01]. + +For a full list of all authors and contributors, +check [the contributor's page][contributors]. + +## License + +MIT License + +Copyright (c) 2021-2022 Mike Degatano + +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. + +[add-addon-shield]: https://my.home-assistant.io/badges/supervisor_addon.svg +[add-addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=39bd2704_promtail +[add-addon-grafana]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_grafana +[add-addon-loki]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=39bd2704_loki +[add-repo-shield]: https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg +[add-repo]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fmdegat01%2Fhassio-addons +[addon-default-config]: https://github.com/mdegat01/addon-promtail/blob/main/promtail/rootfs/etc/promtail/default-scrape-config.yaml +[addon-grafana]: https://github.com/hassio-addons/addon-grafana +[addon-google-drive-backup]: https://github.com/sabeechen/hassio-google-drive-backup +[addon-loki-doc]: https://github.com/mdegat01/addon-loki/blob/main/loki/DOCS.md#grafana +[addon-z2m]: https://github.com/zigbee2mqtt/hassio-zigbee2mqtt +[api]: https://grafana.com/docs/loki/latest/clients/promtail/#api +[contributors]: https://github.com/mdegat01/addon-promtail/graphs/contributors +[discord-ha]: https://discord.gg/c5DvZ4e +[forum-centralcommand]: https://community.home-assistant.io/u/CentralCommand/?u=CentralCommand +[forum]: https://community.home-assistant.io/t/home-assistant-add-on-promtail/293732?u=CentralCommand +[grafana]: https://grafana.com/oss/grafana/ +[grafana-cloud]: https://grafana.com/products/cloud/ +[grafana-cloud-docs-promtail]: https://grafana.com/docs/grafana-cloud/quickstart/logs_promtail_linuxnode/ +[issue]: https://github.com/mdegat01/addon-promtail/issues +[logql]: https://grafana.com/docs/loki/latest/logql/ +[loki-doc]: https://grafana.com/docs/loki/latest/overview/ +[loki-doc-best-practices]: https://grafana.com/docs/loki/latest/best-practices/ +[loki-in-grafana]: https://grafana.com/docs/loki/latest/getting-started/grafana/ +[mdegat01]: https://github.com/mdegat01 +[promtail-doc-examples]: https://grafana.com/docs/loki/latest/clients/promtail/configuration/#example-static-config +[promtil-doc-metrics]: https://grafana.com/docs/loki/latest/clients/promtail/configuration/#metrics +[promtail-doc-scrape-configs]: https://grafana.com/docs/loki/latest/clients/promtail/configuration/#scrape_configs +[promtail-doc-stages]: https://grafana.com/docs/loki/latest/clients/promtail/stages/ +[releases]: https://github.com/mdegat01/addon-promtail/releases +[semver]: http://semver.org/spec/v2.0.0 diff --git a/promtail/Dockerfile b/promtail/Dockerfile new file mode 100644 index 0000000..b2400e8 --- /dev/null +++ b/promtail/Dockerfile @@ -0,0 +1,60 @@ +ARG BUILD_FROM +FROM ${BUILD_FROM} + +# Build arguments +ARG BUILD_ARCH +ARG YQ_VERSION +ARG PROMTAIL_VERSION + +# Add yq and tzdata (required for the timestamp stage) +RUN echo "deb http://deb.debian.org/debian bullseye-backports main" >> /etc/apt/sources.list +RUN apt-get update && apt-get install -t bullseye-backports -qy libsystemd-dev +RUN set -eux; \ + apt-get update; \ + apt-get install -qy --no-install-recommends \ + tar \ + ; \ + update-ca-certificates; \ + \ + case "${BUILD_ARCH}" in \ + amd64) BINARCH='amd64' ;; \ + armhf) BINARCH='arm' ;; \ + armv7) BINARCH='arm' ;; \ + aarch64) BINARCH='arm64' ;; \ + *) echo >&2 "error: unsupported architecture (${APKARCH})"; exit 1 ;; \ + esac; \ + curl -s -J -L -o /tmp/yq.tar.gz \ + "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_${BINARCH}.tar.gz"; \ + tar -xf /tmp/yq.tar.gz -C /usr/bin; \ + mv /usr/bin/yq_linux_${BINARCH} /usr/bin/yq; \ + chmod a+x /usr/bin/yq; \ + rm /tmp/yq.tar.gz; \ + yq --version; \ + \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*; + +# Add promtail +COPY --from=grafana/promtail:${PROMTAIL_VERSION} /usr/bin/promtail /usr/bin/promtail +RUN promtail --version + +COPY rootfs / +WORKDIR /data/promtail + +# Build arguments +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION + +# Labels +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="fbonelle" \ No newline at end of file diff --git a/promtail/apparmor.txt b/promtail/apparmor.txt new file mode 100644 index 0000000..95ca197 --- /dev/null +++ b/promtail/apparmor.txt @@ -0,0 +1,116 @@ +include + +# Docker overlay +@{docker_root}=/docker/ /var/lib/docker/ +@{fs_root}=/ @{docker_root}/overlay2/*/diff/ +@{do_etc}=@{fs_root}/etc/ +@{do_opt}=@{fs_root}/opt/ +@{do_run}=@{fs_root}/{run,var/run}/ +@{do_usr}=@{fs_root}/usr/ +@{do_var}=@{fs_root}/var/ + +# Systemd Journal location +@{journald}=/{run,var}/log/journal/{,**} + +profile promtail flags=(attach_disconnected,mediate_deleted) { + include + include + + # Send signals to child services + signal (send) peer=@{profile_name}//*, + + # Network access + network tcp, + network udp, + + # S6-Overlay + /init rix, + /bin/** rix, + /usr/bin/** rix, + @{do_etc}/s6*/** r, + @{do_etc}/fix-attrs.d/{,**} r, + @{do_etc}/cont-{init,finish}.d/{,**} rwix, + @{do_etc}/services.d/{,**} rwix, + @{do_run}/{s6,s6-rc*,service}/** rix, + /command/** rix, + /package/** rix, + @{do_run}/{,**} rwk, + /dev/tty rw, + @{do_usr}/lib/locale/{,**} r, + @{do_etc}/ssl/openssl.cnf r, + @{do_etc}/{group,hosts,passwd} r, + @{do_etc}/{host,nsswitch,resolv}.conf r, + /dev/null k, + + # https://github.com/hassio-addons/addon-debian-base/blob/main/base/rootfs/etc/cont-init.d/02-set-timezone.sh + # Wants to link /etc/localtime but apparmor sees a random hash so * it is. + @{do_etc}/* rw, + @{do_usr}/share/zoneinfo/{,**} r, + + # Bashio + /usr/lib/bashio/** ix, + /tmp/** rw, + + # Options.json & addon data + /data r, + /data/** rw, + + # Files needed for setup + @{do_etc}/promtail/{,**} rw, + /config/promtail/{,**} r, + /{share,ssl}/{,**} r, + @{journald} r, + + # Programs + /usr/bin/promtail cx -> promtail, + /usr/bin/yq Cx, + + profile promtail flags=(attach_disconnected,mediate_deleted) { + include + + # Receive signals from s6 + signal (receive) peer=*_promtail, + + # Network access + network tcp, + network udp, + network netlink raw, + network unix dgram, + + # Temp files + /tmp/.positions.yaml* rw, + + # Addon data + /data/** r, + /data/promtail/** rwk, + + # Config & log data + @{do_etc}/promtail/config.yaml r, + /config/promtail/{,**} r, + /{share,ssl}/** r, + @{journald} r, + + # Runtime usage + /usr/bin/promtail rm, + @{do_etc}/{hosts,passwd} r, + @{do_etc}/{resolv,nsswitch}.conf r, + @{PROC}/sys/net/core/somaxconn r, + @{sys}/kernel/mm/transparent_hugepage/hpage_pmd_size r, + /dev/null k, + @{do_etc}/ssl/certs/** r, + } + + profile /usr/bin/yq flags=(attach_disconnected,mediate_deleted) { + include + + # Config files + @{do_etc}/promtail/* rw, + /config/promtail/{,**} r, + /share/** r, + + # Runtime usage + /usr/bin/yq rm, + @{sys}/kernel/mm/transparent_hugepage/hpage_pmd_size r, + /dev/null k, + } +} diff --git a/promtail/build.yaml b/promtail/build.yaml new file mode 100644 index 0000000..0054fff --- /dev/null +++ b/promtail/build.yaml @@ -0,0 +1,9 @@ +--- +build_from: + amd64: ghcr.io/hassio-addons/debian-base/amd64:7.1.0 + armhf: ghcr.io/hassio-addons/debian-base/armhf:7.1.0 + armv7: ghcr.io/hassio-addons/debian-base/armv7:7.1.0 + aarch64: ghcr.io/hassio-addons/debian-base/aarch64:7.1.0 +args: + YQ_VERSION: 4.35.1 + PROMTAIL_VERSION: v2.8.4 \ No newline at end of file diff --git a/promtail/config.yaml b/promtail/config.yaml new file mode 100644 index 0000000..bdddeb5 --- /dev/null +++ b/promtail/config.yaml @@ -0,0 +1,39 @@ +--- +name: Promtail +url: https://gitea.bonelle-family.dscloud.biz/francois.bonelle/hassio-repo.git +version: 2.8.4 +slug: promtail +arch: + - aarch64 + - amd64 + - armv7 + - armhf +description: Promtail for Home Assistant +init: false +journald: true +map: + - config + - share + - ssl +watchdog: http://[HOST]:[PORT:9080]/ready +ports: + 9080/tcp: +ports_description: + 9080/tcp: Promtail web server +options: + client: + url: http://loki:3100/loki/api/v1/push + log_level: info +schema: + client: + url: str + username: str? + password: password? + cafile: str? + servername: str? + certfile: str? + keyfile: str? + additional_pipeline_stages: str? + additional_scrape_configs: str? + skip_default_scrape_config: bool? + log_level: list(trace|debug|info|notice|warning|error|fatal)? diff --git a/promtail/icon.png b/promtail/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8e89cb402b223120536b78eda23e49ee6f758705 GIT binary patch literal 19951 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 CjNU~6 literal 0 HcmV?d00001 diff --git a/promtail/rootfs/etc/cont-init.d/promtail_setup.sh b/promtail/rootfs/etc/cont-init.d/promtail_setup.sh new file mode 100755 index 0000000..f8a95eb --- /dev/null +++ b/promtail/rootfs/etc/cont-init.d/promtail_setup.sh @@ -0,0 +1,129 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash +# ============================================================================== +# Home Assistant Add-on: Promtail +# This file makes the config file from inputs +# ============================================================================== +readonly CONFIG_DIR=/etc/promtail +readonly CONFIG_FILE="${CONFIG_DIR}/config.yaml" +readonly BASE_CONFIG="${CONFIG_DIR}/base_config.yaml" +readonly DEF_SCRAPE_CONFIGS="${CONFIG_DIR}/default-scrape-config.yaml" +readonly CUSTOM_SCRAPE_CONFIGS="${CONFIG_DIR}/custom-scrape-config.yaml" +declare cafile +declare add_stages +declare add_scrape_configs +scrape_configs="${DEF_SCRAPE_CONFIGS}" + +bashio::log.info 'Setting base config for promtail...' +cp "${BASE_CONFIG}" "${CONFIG_FILE}" + +# Set up client section +if ! bashio::config.is_empty 'client.username'; then + bashio::log.info 'Adding basic auth to client config...' + bashio::config.require 'client.password' "'client.username' is specified" + { + echo " basic_auth:" + echo " username: $(bashio::config 'client.username')" + echo " password: $(bashio::config 'client.password')" + } >> "${CONFIG_FILE}" +fi + +if ! bashio::config.is_empty 'client.cafile'; then + bashio::log.info "Adding TLS to client config..." + cafile="/ssl/$(bashio::config 'client.cafile')" + + if ! bashio::fs.file_exists "${cafile}"; then + bashio::log.fatal + bashio::log.fatal "The file specified for 'cafile' does not exist!" + bashio::log.fatal "Ensure the CA certificate file exists and full path is provided" + bashio::log.fatal + bashio::exit.nok + fi + { + echo " tls_config:" + echo " ca_file: ${cafile}" + } >> "${CONFIG_FILE}" + + if ! bashio::config.is_empty 'client.servername'; then + echo " server_name: $(bashio::config 'client.servername')" >> "${CONFIG_FILE}" + fi + + if ! bashio::config.is_empty 'client.certfile'; then + bashio::log.info "Adding mTLS to client config..." + bashio::config.require 'client.keyfile' "'client.certfile' is specified" + if ! bashio::fs.file_exists "$(bashio::config 'client.certfile')"; then + bashio::log.fatal + bashio::log.fatal "The file specified for 'certfile' does not exist!" + bashio::log.fatal "Ensure the certificate file exists and full path is provided" + bashio::log.fatal + bashio::exit.nok + fi + if ! bashio::fs.file_exists "$(bashio::config 'client.keyfile')"; then + bashio::log.fatal + bashio::log.fatal "The file specified for 'keyfile' does not exist!" + bashio::log.fatal "Ensure the key file exists and full path is provided" + bashio::log.fatal + bashio::exit.nok + fi + { + echo " cert_file: $(bashio::config 'client.certfile')" + echo " key_file: $(bashio::config 'client.keyfile')" + } >> "${CONFIG_FILE}" + fi +fi + +# Add in scrape configs +{ + echo + echo "scrape_configs:" +} >> "${CONFIG_FILE}" +if bashio::config.true 'skip_default_scrape_config'; then + bashio::log.info 'Skipping default journald scrape config...' + if ! bashio::config.is_empty 'additional_pipeline_stages'; then + bashio::log.warning + bashio::log.warning "'additional_pipeline_stages' ignored since 'skip_default_scrape_config' is true!" + bashio::log.warning 'See documentation for more information.' + bashio::log.warning + fi + bashio::config.require 'additional_scrape_configs' "'skip_default_scrape_config' is true" + +elif ! bashio::config.is_empty 'additional_pipeline_stages'; then + bashio::log.info "Adding additional pipeline stages to default journal scrape config..." + add_stages="$(bashio::config 'additional_pipeline_stages')" + scrape_configs="${CUSTOM_SCRAPE_CONFIGS}" + if ! bashio::fs.file_exists "${add_stages}"; then + bashio::log.fatal + bashio::log.fatal "The file specified for 'additional_pipeline_stages' does not exist!" + bashio::log.fatal "Ensure the file exists at the path specified" + bashio::log.fatal + bashio::exit.nok + fi + + yq -NP eval-all \ + 'select(fi == 0) + [{"add_pipeline_stages": select(fi == 1)}]' \ + "${DEF_SCRAPE_CONFIGS}" "${add_stages}" \ + | yq -NP e \ + '[(.[0] * .[1]) | {"job_name": .job_name, "journal": .journal, "relabel_configs": .relabel_configs, "pipeline_stages": .pipeline_stages + .add_pipeline_stages}]' \ + - > "${scrape_configs}" +fi + +if ! bashio::config.is_empty 'additional_scrape_configs'; then + bashio::log.info "Adding custom scrape configs..." + add_scrape_configs="$(bashio::config 'additional_scrape_configs')" + if ! bashio::fs.file_exists "${add_scrape_configs}"; then + bashio::log.fatal + bashio::log.fatal "The file specified for 'additional_scrape_configs' does not exist!" + bashio::log.fatal "Ensure the file exists at the path specified" + bashio::log.fatal + bashio::exit.nok + fi + + if bashio::config.true 'skip_default_scrape_config'; then + yq -NP e '[] + .' "${add_scrape_configs}" >> "${CONFIG_FILE}" + else + yq -NP eval-all 'select(fi == 0) + select(fi == 1)' \ + "${scrape_configs}" "${add_scrape_configs}" >> "${CONFIG_FILE}" + fi +else + yq -NP e '[] + .' "${scrape_configs}" >> "${CONFIG_FILE}" +fi diff --git a/promtail/rootfs/etc/promtail/base_config.yaml b/promtail/rootfs/etc/promtail/base_config.yaml new file mode 100644 index 0000000..0e6eb25 --- /dev/null +++ b/promtail/rootfs/etc/promtail/base_config.yaml @@ -0,0 +1,11 @@ +--- +server: + http_listen_port: 9080 + grpc_listen_port: 0 + log_level: "${LOG_LEVEL}" + +positions: + filename: /data/promtail/positions.yaml + +clients: + - url: "${URL}" diff --git a/promtail/rootfs/etc/promtail/default-scrape-config.yaml b/promtail/rootfs/etc/promtail/default-scrape-config.yaml new file mode 100644 index 0000000..6e3f112 --- /dev/null +++ b/promtail/rootfs/etc/promtail/default-scrape-config.yaml @@ -0,0 +1,27 @@ +--- +- job_name: journal + journal: + json: false + max_age: 12h + labels: + job: systemd-journal + path: "${JOURNAL_PATH}" + relabel_configs: + - source_labels: + - __journal__systemd_unit + target_label: unit + - source_labels: + - __journal__hostname + target_label: nodename + - source_labels: + - __journal_syslog_identifier + target_label: syslog_identifier + - source_labels: + - __journal_container_name + target_label: container_name + pipeline_stages: + - match: + selector: '{container_name=~"homeassistant|hassio_supervisor"}' + stages: + - multiline: + firstline: '^\x{001b}' diff --git a/promtail/rootfs/etc/services.d/promtail/finish b/promtail/rootfs/etc/services.d/promtail/finish new file mode 100755 index 0000000..649e4e5 --- /dev/null +++ b/promtail/rootfs/etc/services.d/promtail/finish @@ -0,0 +1,15 @@ +#!/usr/bin/env bashio +# ============================================================================== +# Take down the S6 supervision tree when Promtail fails +# s6-overlay docs: https://github.com/just-containers/s6-overlay +# ============================================================================== + +declare APP_EXIT_CODE=${1} + +if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then + bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}" + echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode + exec /run/s6/basedir/bin/halt +fi + +bashio::log.info "Service restart after closing" diff --git a/promtail/rootfs/etc/services.d/promtail/run b/promtail/rootfs/etc/services.d/promtail/run new file mode 100755 index 0000000..d5f6a71 --- /dev/null +++ b/promtail/rootfs/etc/services.d/promtail/run @@ -0,0 +1,40 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash +# ============================================================================== +# Home Assistant Add-on: Promtail +# Runs Promtail +# ============================================================================== +readonly PROMTAIL_CONFIG='/etc/promtail/config.yaml' +declare log_level + +bashio::log.info 'Starting Promtail...' + +journal_path='/var/log/journal' +if ! bashio::fs.directory_exists "${journal_path}" || [ -z "$(ls -A ${journal_path})" ]; then + bashio::log.info "No journal at ${journal_path}, looking for journal in /run/log/journal instead" + journal_path='/run/log/journal' +fi + +case "$(bashio::config 'log_level')" in \ + trace) ;& \ + debug) log_level='debug' ;; \ + notice) ;& \ + warning) log_level='warn' ;; \ + error) ;& \ + fatal) log_level='error' ;; \ + *) log_level='info' ;; \ +esac; +bashio::log.info "Promtail log level set to ${log_level}" + +export "URL=$(bashio::config 'client.url')" +export "JOURNAL_PATH=${journal_path}" +export "LOG_LEVEL=${log_level}" + +promtail_args=("-config.expand-env=true" "-config.file=${PROMTAIL_CONFIG}") +if [ "${log_level}" == "debug" ]; then + bashio::log.debug "Logging full config on startup for debugging..." + promtail_args+=("-print-config-stderr=true") +fi + +bashio::log.info "Handing over control to Promtail..." +/usr/bin/promtail "${promtail_args[@]}" diff --git a/telegraf/build.yaml b/telegraf/build.yaml index 574b7fa..ecc93ec 100644 --- a/telegraf/build.yaml +++ b/telegraf/build.yaml @@ -1,8 +1,8 @@ build_from: - aarch64: ghcr.io/hassio-addons/debian-base:7.0.0 - amd64: ghcr.io/hassio-addons/debian-base:7.0.0 - armhf: ghcr.io/hassio-addons/debian-base:7.0.0 - armv7: ghcr.io/hassio-addons/debian-base:7.0.0 - i386: ghcr.io/hassio-addons/debian-base:7.0.0 + aarch64: ghcr.io/hassio-addons/debian-base:7.1.0 + amd64: ghcr.io/hassio-addons/debian-base:7.1.0 + armhf: ghcr.io/hassio-addons/debian-base:7.1.0 + armv7: ghcr.io/hassio-addons/debian-base:7.1.0 + i386: ghcr.io/hassio-addons/debian-base:7.1.0 args: - TELEGRAF_VERSION: 1.27.2-1 + TELEGRAF_VERSION: 1.27.4-1 diff --git a/telegraf/config.yaml b/telegraf/config.yaml index d106244..ba3b698 100644 --- a/telegraf/config.yaml +++ b/telegraf/config.yaml @@ -1,6 +1,6 @@ --- name: Telegraf -version: 1.27.2-1 +version: 1.27.4-1 slug: hassio_telegraf description: An addon to add telegraf to hassio. url: https://gitea.bonelle-family.dscloud.biz/francois.bonelle/hassio-repo.git diff --git a/telegraf/icon.png b/telegraf/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8e00f0a71e2b934a664e48ab74218788ad92cf GIT binary patch literal 18952 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 R>!2e?JYD@<);T3K0Ra47?W_O* literal 0 HcmV?d00001