adding node exporter, loki, and promtail
							
								
								
									
										1
									
								
								addon-prometheus/.github/CODEOWNERS
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1 +0,0 @@
 | 
				
			|||||||
.github/* @frenck
 | 
					 | 
				
			||||||
							
								
								
									
										133
									
								
								addon-prometheus/.github/CODE_OF_CONDUCT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,133 +0,0 @@
 | 
				
			|||||||
# Contributor Covenant Code of Conduct
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Our Pledge
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
We as members, contributors, and leaders pledge to make participation in our
 | 
					 | 
				
			||||||
community a harassment-free experience for everyone, regardless of age, body
 | 
					 | 
				
			||||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
 | 
					 | 
				
			||||||
identity and expression, level of experience, education, socio-economic status,
 | 
					 | 
				
			||||||
nationality, personal appearance, race, religion, or sexual identity
 | 
					 | 
				
			||||||
and orientation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
We pledge to act and interact in ways that contribute to an open, welcoming,
 | 
					 | 
				
			||||||
diverse, inclusive, and healthy community.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Our Standards
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Examples of behavior that contributes to a positive environment for our
 | 
					 | 
				
			||||||
community include:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Demonstrating empathy and kindness toward other people
 | 
					 | 
				
			||||||
- Being respectful of differing opinions, viewpoints, and experiences
 | 
					 | 
				
			||||||
- Giving and gracefully accepting constructive feedback
 | 
					 | 
				
			||||||
- Accepting responsibility and apologizing to those affected by our mistakes,
 | 
					 | 
				
			||||||
  and learning from the experience
 | 
					 | 
				
			||||||
- Focusing on what is best not just for us as individuals, but for the
 | 
					 | 
				
			||||||
  overall community
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Examples of unacceptable behavior include:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- The use of sexualized language or imagery, and sexual attention or
 | 
					 | 
				
			||||||
  advances of any kind
 | 
					 | 
				
			||||||
- Trolling, insulting or derogatory comments, and personal or political attacks
 | 
					 | 
				
			||||||
- Public or private harassment
 | 
					 | 
				
			||||||
- Publishing others' private information, such as a physical or email
 | 
					 | 
				
			||||||
  address, without their explicit permission
 | 
					 | 
				
			||||||
- Other conduct which could reasonably be considered inappropriate in a
 | 
					 | 
				
			||||||
  professional setting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Enforcement Responsibilities
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Community leaders are responsible for clarifying and enforcing our standards of
 | 
					 | 
				
			||||||
acceptable behavior and will take appropriate and fair corrective action in
 | 
					 | 
				
			||||||
response to any behavior that they deem inappropriate, threatening, offensive,
 | 
					 | 
				
			||||||
or harmful.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Community leaders have the right and responsibility to remove, edit, or reject
 | 
					 | 
				
			||||||
comments, commits, code, wiki edits, issues, and other contributions that are
 | 
					 | 
				
			||||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
 | 
					 | 
				
			||||||
decisions when appropriate.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Scope
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This Code of Conduct applies within all community spaces, and also applies when
 | 
					 | 
				
			||||||
an individual is officially representing the community in public spaces.
 | 
					 | 
				
			||||||
Examples of representing our community include using an official e-mail address,
 | 
					 | 
				
			||||||
posting via an official social media account, or acting as an appointed
 | 
					 | 
				
			||||||
representative at an online or offline event.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Enforcement
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
					 | 
				
			||||||
reported to the community leaders responsible for enforcement at
 | 
					 | 
				
			||||||
frenck@frenck.dev.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
All complaints will be reviewed and investigated promptly and fairly.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
All community leaders are obligated to respect the privacy and security of the
 | 
					 | 
				
			||||||
reporter of any incident.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Enforcement Guidelines
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Community leaders will follow these Community Impact Guidelines in determining
 | 
					 | 
				
			||||||
the consequences for any action they deem in violation of this Code of Conduct:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 1. Correction
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Community Impact**: Use of inappropriate language or other behavior deemed
 | 
					 | 
				
			||||||
unprofessional or unwelcome in the community.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Consequence**: A private, written warning from community leaders, providing
 | 
					 | 
				
			||||||
clarity around the nature of the violation and an explanation of why the
 | 
					 | 
				
			||||||
behavior was inappropriate. A public apology may be requested.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 2. Warning
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Community Impact**: A violation through a single incident or series
 | 
					 | 
				
			||||||
of actions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Consequence**: A warning with consequences for continued behavior. No
 | 
					 | 
				
			||||||
interaction with the people involved, including unsolicited interaction with
 | 
					 | 
				
			||||||
those enforcing the Code of Conduct, for a specified period of time. This
 | 
					 | 
				
			||||||
includes avoiding interactions in community spaces as well as external channels
 | 
					 | 
				
			||||||
like social media. Violating these terms may lead to a temporary or
 | 
					 | 
				
			||||||
permanent ban.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 3. Temporary Ban
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Community Impact**: A serious violation of community standards, including
 | 
					 | 
				
			||||||
sustained inappropriate behavior.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Consequence**: A temporary ban from any sort of interaction or public
 | 
					 | 
				
			||||||
communication with the community for a specified period of time. No public or
 | 
					 | 
				
			||||||
private interaction with the people involved, including unsolicited interaction
 | 
					 | 
				
			||||||
with those enforcing the Code of Conduct, is allowed during this period.
 | 
					 | 
				
			||||||
Violating these terms may lead to a permanent ban.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 4. Permanent Ban
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Community Impact**: Demonstrating a pattern of violation of community
 | 
					 | 
				
			||||||
standards, including sustained inappropriate behavior, harassment of an
 | 
					 | 
				
			||||||
individual, or aggression toward or disparagement of classes of individuals.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Consequence**: A permanent ban from any sort of public interaction within
 | 
					 | 
				
			||||||
the community.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Attribution
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
 | 
					 | 
				
			||||||
version 2.0, available at
 | 
					 | 
				
			||||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Community Impact Guidelines were inspired by
 | 
					 | 
				
			||||||
[Mozilla's code of conduct enforcement ladder][mozilla coc].
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For answers to common questions about this code of conduct, see the FAQ at
 | 
					 | 
				
			||||||
[https://www.contributor-covenant.org/faq][faq]. Translations are available
 | 
					 | 
				
			||||||
at [https://www.contributor-covenant.org/translations][translations].
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[homepage]: https://www.contributor-covenant.org
 | 
					 | 
				
			||||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
 | 
					 | 
				
			||||||
[mozilla coc]: https://github.com/mozilla/diversity
 | 
					 | 
				
			||||||
[faq]: https://www.contributor-covenant.org/faq
 | 
					 | 
				
			||||||
[translations]: https://www.contributor-covenant.org/translations
 | 
					 | 
				
			||||||
							
								
								
									
										29
									
								
								addon-prometheus/.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,29 +0,0 @@
 | 
				
			|||||||
# Contributing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
When contributing to this repository, please first discuss the change you wish
 | 
					 | 
				
			||||||
to make via issue, email, or any other method with the owners of this repository
 | 
					 | 
				
			||||||
before making a change.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Please note we have a code of conduct, please follow it in all your interactions
 | 
					 | 
				
			||||||
with the project.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Issues and feature requests
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You've found a bug in the source code, a mistake in the documentation or maybe
 | 
					 | 
				
			||||||
you'd like a new feature? You can help us by submitting an issue to our
 | 
					 | 
				
			||||||
[GitHub Repository][github]. Before you create an issue, make sure you search
 | 
					 | 
				
			||||||
the archive, maybe your question was already answered.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Even better: You could submit a pull request with a fix / new feature!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Pull request process
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Search our repository for open or closed [pull requests][prs] that relates
 | 
					 | 
				
			||||||
   to your submission. You don't want to duplicate effort.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. You may merge the pull request in once you have the sign-off of two other
 | 
					 | 
				
			||||||
   developers, or if you do not have permission to do that, you may request
 | 
					 | 
				
			||||||
   the second reviewer to merge it for you.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[github]: https://github.com/hassio-addons/addon-prometheus/issues
 | 
					 | 
				
			||||||
[prs]: https://github.com/hassio-addons/addon-prometheus/pulls
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								addon-prometheus/.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,2 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
ko_fi: mjrider
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								addon-prometheus/.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,20 +0,0 @@
 | 
				
			|||||||
# Problem/Motivation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (Why the issue was filed)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Expected behavior
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (What you expected to happen)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Actual behavior
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (What actually happened)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Steps to reproduce
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (How can someone else make/see it happen)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Proposed changes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (If you have a proposed change, workaround or fix,
 | 
					 | 
				
			||||||
> describe the rationale behind it)
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
# Proposed Changes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> (Describe the changes and rationale behind them)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Related Issues
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> ([Github link][autolink-references] to related issues or pull requests)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
 | 
					 | 
				
			||||||
							
								
								
									
										1839
									
								
								addon-prometheus/.github/SECURITY.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										8
									
								
								addon-prometheus/.github/dependabot.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,8 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
version: 2
 | 
					 | 
				
			||||||
updates:
 | 
					 | 
				
			||||||
  - package-ecosystem: "github-actions"
 | 
					 | 
				
			||||||
    directory: "/"
 | 
					 | 
				
			||||||
    schedule:
 | 
					 | 
				
			||||||
      interval: daily
 | 
					 | 
				
			||||||
      time: "06:00"
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								addon-prometheus/.github/workflows/ci.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,16 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: CI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
  pull_request:
 | 
					 | 
				
			||||||
    types:
 | 
					 | 
				
			||||||
      - opened
 | 
					 | 
				
			||||||
      - reopened
 | 
					 | 
				
			||||||
      - synchronize
 | 
					 | 
				
			||||||
  workflow_dispatch:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/addon-ci.yaml@main
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								addon-prometheus/.github/workflows/deploy.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,19 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Deploy
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  release:
 | 
					 | 
				
			||||||
    types:
 | 
					 | 
				
			||||||
      - published
 | 
					 | 
				
			||||||
  workflow_run:
 | 
					 | 
				
			||||||
    workflows: ["CI"]
 | 
					 | 
				
			||||||
    branches: [main]
 | 
					 | 
				
			||||||
    types:
 | 
					 | 
				
			||||||
      - completed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/addon-deploy.yaml@main
 | 
					 | 
				
			||||||
    secrets:
 | 
					 | 
				
			||||||
      DISPATCH_TOKEN: ${{ secrets.DISPATCH_TOKEN }}
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								addon-prometheus/.github/workflows/labels.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,12 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Sync labels
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: "34 5 * * *"
 | 
					 | 
				
			||||||
  workflow_dispatch:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/labels.yaml@main
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								addon-prometheus/.github/workflows/lock.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,12 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Lock
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: "0 9 * * *"
 | 
					 | 
				
			||||||
  workflow_dispatch:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/lock.yaml@main
 | 
					 | 
				
			||||||
@@ -1,15 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: PR Labels
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  pull_request_target:
 | 
					 | 
				
			||||||
    types:
 | 
					 | 
				
			||||||
      - opened
 | 
					 | 
				
			||||||
      - labeled
 | 
					 | 
				
			||||||
      - unlabeled
 | 
					 | 
				
			||||||
      - synchronize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/pr-labels.yaml@main
 | 
					 | 
				
			||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Release Drafter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/release-drafter.yaml@main
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								addon-prometheus/.github/workflows/stale.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,12 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Stale
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# yamllint disable-line rule:truthy
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: "0 8 * * *"
 | 
					 | 
				
			||||||
  workflow_dispatch:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  workflows:
 | 
					 | 
				
			||||||
    uses: hassio-addons/workflows/.github/workflows/stale.yaml@main
 | 
					 | 
				
			||||||
							
								
								
									
										0
									
								
								addon-prometheus/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1 +0,0 @@
 | 
				
			|||||||
rules "~MD024"
 | 
					 | 
				
			||||||
@@ -1,66 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
# 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.
 | 
					 | 
				
			||||||
@@ -1,136 +0,0 @@
 | 
				
			|||||||
# 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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||

 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## About
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*Update 2024-08-31*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This addon has been forked, and now updates prometheus to 2.54.1, as well `hassio-addons/base` being updated to 16.2.1. This addon now merges a yaml file named `prometheus.yaml` located in `/share/prometheus` with the configuration located within the container. This allows for (but not just) the targeting of a remote alert manager instance.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For example, the contents of `/share/prometheus/prometheus.yaml` could contain:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
# Alertmanager configuration
 | 
					 | 
				
			||||||
alerting:
 | 
					 | 
				
			||||||
  alertmanagers:
 | 
					 | 
				
			||||||
    - static_configs:
 | 
					 | 
				
			||||||
        - targets:
 | 
					 | 
				
			||||||
          - 1.3.3.7:9093
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Which would then send alerts to an alert manager instance located at `http://1.3.3.7:9093`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
....
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[: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
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
| 
		 Before Width: | Height: | Size: 104 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
@@ -1,3 +0,0 @@
 | 
				
			|||||||
name: Prometheus
 | 
					 | 
				
			||||||
url: https://github.com/martydingo/homeassistant-addon-prometheus
 | 
					 | 
				
			||||||
maintainer: Martin George <marty@dingo.foo>
 | 
					 | 
				
			||||||
							
								
								
									
										131
									
								
								addon-promtail-main/.README.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					# Home Assistant Add-on: Promtail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![GitHub Release][releases-shield]][releases]
 | 
				
			||||||
 | 
					![Project Stage][project-stage-shield]
 | 
				
			||||||
 | 
					[![License][license-shield]][license]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					![Project Maintenance][maintenance-shield]
 | 
				
			||||||
 | 
					[![Community Forum][forum-shield]][forum]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Promtail][promtail] is an agent which ships the contents of local logs to a private
 | 
				
			||||||
 | 
					[Loki][loki] instance or [Grafana Cloud][grafana-cloud]. It is usually deployed
 | 
				
			||||||
 | 
					to every machine that has applications needed to be monitored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% set repository = namespace(url='https%3A//github.com/mdegat01/hassio-addons', slug='39bd2704') %}
 | 
				
			||||||
 | 
					{% if channel == "edge" %}
 | 
				
			||||||
 | 
					{% set repository.url = repository.url + '-edge' %}
 | 
				
			||||||
 | 
					{% set repository.slug = '7eb274d5' %}
 | 
				
			||||||
 | 
					## WARNING! THIS IS AN EDGE REPOSITORY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This Add-ons repository contains edge builds of add-ons. Edge
 | 
				
			||||||
 | 
					builds of 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 these add-ons:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<https://github.com/mdegat01/hassio-addons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% elif channel == "beta" %}
 | 
				
			||||||
 | 
					{% set repository.url = repository.url + '-beta' %}
 | 
				
			||||||
 | 
					{% set repository.slug = 'e9a81774' %}
 | 
				
			||||||
 | 
					## WARNING! THIS IS A BETA REPOSITORY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This Add-ons repository contains beta builds of add-ons. Beta
 | 
				
			||||||
 | 
					builds of add-ons are based upon the latest release including pre-releases.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 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 these add-ons:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<https://github.com/mdegat01/hassio-addons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					## About
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default this addon version of Promtail will tail logs from the systemd
 | 
				
			||||||
 | 
					journal. This will include all logs from all addons, supervisor, home assistant,
 | 
				
			||||||
 | 
					docker, and the host system itself. In addition you can set it up to look for
 | 
				
			||||||
 | 
					local log files in `/share` or `/ssl` if you have a particular add-on that logs
 | 
				
			||||||
 | 
					to a file instead of to `stdout`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if channel == "edge" %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
 | 
				
			||||||
 | 
					{% elif channel == "beta" %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-beta-orange.svg
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					[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-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
 | 
				
			||||||
 | 
					[forum]: https://community.home-assistant.io/t/home-assistant-add-on-promtail/293732?u=CentralCommand
 | 
				
			||||||
 | 
					[grafana-cloud]: https://grafana.com/products/cloud/
 | 
				
			||||||
 | 
					[loki]: https://grafana.com/oss/loki
 | 
				
			||||||
 | 
					[mdegat01]: https://github.com/mdegat01
 | 
				
			||||||
 | 
					[issue]: https://github.com/mdegat01/addon-promtail/issues
 | 
				
			||||||
 | 
					[license]: https://github.com/mdegat01/addon-promtail/blob/main/LICENSE
 | 
				
			||||||
 | 
					[license-shield]: https://img.shields.io/github/license/mdegat01/addon-promtail.svg
 | 
				
			||||||
 | 
					[maintenance-shield]: https://img.shields.io/maintenance/yes/2022.svg
 | 
				
			||||||
 | 
					[promtail]: https://grafana.com/docs/loki/latest/clients/promtail/
 | 
				
			||||||
 | 
					[releases-shield]: https://img.shields.io/github/release/mdegat01/addon-promtail.svg
 | 
				
			||||||
 | 
					[releases]: https://github.com/mdegat01/addon-promtail/releases
 | 
				
			||||||
							
								
								
									
										252
									
								
								addon-promtail-main/DOCS.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,252 @@
 | 
				
			|||||||
 | 
					# Home Assistant Add-on: Promtail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First add the repository to the add-on store (`https://mezgit.duckdns.org/mezned/HAddons`):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the add add-on repository dialog
 | 
				
			||||||
 | 
					with a specific repository URL pre-filled.][add-repo-shield]][add-repo]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then find Promtail in the store and click install:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Default Setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default this addon version of Promtail will tail logs from the systemd
 | 
				
			||||||
 | 
					journal. This will include all logs from all addons, supervisor, home assistant,
 | 
				
			||||||
 | 
					docker, and the host system itself. It will then ship them to the Loki add-on in
 | 
				
			||||||
 | 
					this same repository if you have it installed. No additional configuration is
 | 
				
			||||||
 | 
					required if this is the setup you want.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you adjusted the configuration of the Loki add-on, have a separate Loki
 | 
				
			||||||
 | 
					add-on or have other log files you want Promtail to monitor then see below for
 | 
				
			||||||
 | 
					the configuration options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _Remember to restart the add-on when the configuration is changed._
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example add-on configuration:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					client:
 | 
				
			||||||
 | 
					  url: http://39bd2704-loki:3100
 | 
				
			||||||
 | 
					  username: loki
 | 
				
			||||||
 | 
					  password: secret
 | 
				
			||||||
 | 
					  cafile: /ssl/ca.pem
 | 
				
			||||||
 | 
					additional_scrape_configs: /share/promtail/scrape_configs.yaml
 | 
				
			||||||
 | 
					log_level: info
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _This is just an example, don't copy and paste it! Create your own!_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `client.url` (required)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The URL of the Loki deployment Promtail should ship logs to.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you use the Loki add-on, this will be `http://39bd2704-loki:3100` (unless you
 | 
				
			||||||
 | 
					enabled `ssl`, then change it to `https`). If you use Grafana Cloud then the URL
 | 
				
			||||||
 | 
					will look like this: `https://<User>:<Your Grafana.com API Key>@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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										76
									
								
								addon-promtail-main/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					# https://github.com/mdegat01/promtail-journal/releases
 | 
				
			||||||
 | 
					#FROM ghcr.io/mdegat01/promtail-journal/${BUILD_ARCH}:1.6.0 as build_promtail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/hassio-addons/addon-debian-base/releases
 | 
				
			||||||
 | 
					# hadolint ignore=DL3006
 | 
				
			||||||
 | 
					ARG BUILD_FROM
 | 
				
			||||||
 | 
					FROM ${BUILD_FROM}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/mikefarah/yq/releases
 | 
				
			||||||
 | 
					ARG YQ_VERSION=4.44.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG BUILD_ARCH
 | 
				
			||||||
 | 
					# 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=1.34+dfsg-1 \
 | 
				
			||||||
 | 
					        ; \
 | 
				
			||||||
 | 
					    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/*; \
 | 
				
			||||||
 | 
					    chmod +x /etc/cont-init.d/promtail_setup.sh; \
 | 
				
			||||||
 | 
					    chmod +x /etc/services.d/promtail/*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add promtail
 | 
				
			||||||
 | 
					COPY --from=grafana/promtail:latest /usr/bin/promtail /usr/bin/promtail
 | 
				
			||||||
 | 
					RUN promtail --version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY rootfs /
 | 
				
			||||||
 | 
					WORKDIR /data/promtail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build arguments
 | 
				
			||||||
 | 
					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="Feres" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.title="${BUILD_NAME}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.vendor="Ferfes's Home Assistant Add-ons" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.authors="Feres" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.licenses="MIT" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.url="https://github.com/mdegat01/hassio-addons" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.created=${BUILD_DATE} \
 | 
				
			||||||
 | 
					    org.opencontainers.image.revision=${BUILD_REF} \
 | 
				
			||||||
 | 
					    org.opencontainers.image.version=${BUILD_VERSION}
 | 
				
			||||||
							
								
								
									
										116
									
								
								addon-promtail-main/apparmor.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					include <tunables/global>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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 <abstractions/base>
 | 
				
			||||||
 | 
					  include <abstractions/bash>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # 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 <abstractions/base>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 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 <abstractions/base>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 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,
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								addon-promtail-main/build.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					build_from:
 | 
				
			||||||
 | 
					  amd64: ghcr.io/hassio-addons/debian-base/amd64:7.5.1
 | 
				
			||||||
 | 
					  armhf: ghcr.io/hassio-addons/debian-base/armhf:7.5.1
 | 
				
			||||||
 | 
					  armv7: ghcr.io/hassio-addons/debian-base/armv7:7.5.1
 | 
				
			||||||
 | 
					  aarch64: ghcr.io/hassio-addons/debian-base/aarch64:7.5.1
 | 
				
			||||||
 | 
					codenotary:
 | 
				
			||||||
 | 
					  base_image: codenotary@frenck.dev
 | 
				
			||||||
 | 
					  signer: codenotary@degatano.com
 | 
				
			||||||
							
								
								
									
										40
									
								
								addon-promtail-main/config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: Promtail
 | 
				
			||||||
 | 
					url: https://mezgit.duckdns.org/mezned/HAddons
 | 
				
			||||||
 | 
					version: edge
 | 
				
			||||||
 | 
					slug: promtail
 | 
				
			||||||
 | 
					arch:
 | 
				
			||||||
 | 
					  - aarch64
 | 
				
			||||||
 | 
					  - amd64
 | 
				
			||||||
 | 
					  - armv7
 | 
				
			||||||
 | 
					  - armhf
 | 
				
			||||||
 | 
					description: Promtail for Home Assistant
 | 
				
			||||||
 | 
					codenotary: codenotary@degatano.com
 | 
				
			||||||
 | 
					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://39bd2704-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)?
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								addon-promtail-main/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								addon-promtail-main/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										129
									
								
								addon-promtail-main/rootfs/etc/cont-init.d/promtail_setup.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -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
 | 
				
			||||||
							
								
								
									
										11
									
								
								addon-promtail-main/rootfs/etc/promtail/base_config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -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}"
 | 
				
			||||||
@@ -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}'
 | 
				
			||||||
							
								
								
									
										15
									
								
								addon-promtail-main/rootfs/etc/services.d/promtail/finish
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -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"
 | 
				
			||||||
							
								
								
									
										40
									
								
								addon-promtail-main/rootfs/etc/services.d/promtail/run
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -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[@]}"
 | 
				
			||||||
							
								
								
									
										126
									
								
								loki/.README.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,126 @@
 | 
				
			|||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![GitHub Release][releases-shield]][releases]
 | 
				
			||||||
 | 
					![Project Stage][project-stage-shield]
 | 
				
			||||||
 | 
					[![License][license-shield]][license]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					![Project Maintenance][maintenance-shield]
 | 
				
			||||||
 | 
					[![Community Forum][forum-shield]][forum]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_Like Prometheus, but for logs!_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% set repository = namespace(url='https%3A//github.com/mdegat01/hassio-addons', slug='39bd2704') %}
 | 
				
			||||||
 | 
					{% if channel == "edge" %}
 | 
				
			||||||
 | 
					{% set repository.url = repository.url + '-edge' %}
 | 
				
			||||||
 | 
					{% set repository.slug = '7eb274d5' %}
 | 
				
			||||||
 | 
					## WARNING! THIS IS AN EDGE REPOSITORY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This Add-ons repository contains edge builds of add-ons. Edge
 | 
				
			||||||
 | 
					builds of 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 these add-ons:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<https://github.com/mdegat01/hassio-addons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% elif channel == "beta" %}
 | 
				
			||||||
 | 
					{% set repository.url = repository.url + '-beta' %}
 | 
				
			||||||
 | 
					{% set repository.slug = 'e9a81774' %}
 | 
				
			||||||
 | 
					## WARNING! THIS IS A BETA REPOSITORY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This Add-ons repository contains beta builds of add-ons. Beta
 | 
				
			||||||
 | 
					builds of add-ons are based upon the latest release including pre-releases.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 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 these add-ons:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<https://github.com/mdegat01/hassio-addons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					## About
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Grafana Loki][loki] is a horizontally-scalable,
 | 
				
			||||||
 | 
					highly-available, multi-tenant log aggregation system inspired by Prometheus. It
 | 
				
			||||||
 | 
					is designed to be very cost effective and easy to operate. It does not index the
 | 
				
			||||||
 | 
					contents of the logs, but rather a set of labels for each log stream.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if channel == "edge" %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
 | 
				
			||||||
 | 
					{% elif channel == "beta" %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-beta-orange.svg
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					[contributors]: https://github.com/mdegat01/addon-loki/graphs/contributors
 | 
				
			||||||
 | 
					[discord-ha]: https://discord.gg/c5DvZ4e
 | 
				
			||||||
 | 
					[forum-centralcommand]: https://community.home-assistant.io/u/CentralCommand/?u=CentralCommand
 | 
				
			||||||
 | 
					[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
 | 
				
			||||||
 | 
					[forum]: https://community.home-assistant.io/t/home-assistant-add-on-loki/293731?u=CentralCommand
 | 
				
			||||||
 | 
					[loki]: https://grafana.com/oss/loki/
 | 
				
			||||||
 | 
					[mdegat01]: https://github.com/mdegat01
 | 
				
			||||||
 | 
					[issue]: https://github.com/mdegat01/addon-loki/issues
 | 
				
			||||||
 | 
					[license]: https://github.com/mdegat01/addon-loki/blob/main/LICENSE
 | 
				
			||||||
 | 
					[license-shield]: https://img.shields.io/github/license/mdegat01/addon-loki.svg
 | 
				
			||||||
 | 
					[maintenance-shield]: https://img.shields.io/maintenance/yes/2022.svg
 | 
				
			||||||
 | 
					[releases-shield]: https://img.shields.io/github/release/mdegat01/addon-loki.svg
 | 
				
			||||||
 | 
					[releases]: https://github.com/mdegat01/addon-loki/releases
 | 
				
			||||||
							
								
								
									
										213
									
								
								loki/DOCS.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,213 @@
 | 
				
			|||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First add the repository to the add-on store (`https://mezgit.duckdns.org/mezned/HAddons`):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the add add-on repository dialog
 | 
				
			||||||
 | 
					with a specific repository URL pre-filled.][add-repo-shield]][add-repo]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then find Loki in the store and click install:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Default Setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are also using the Promtail add-on in this repository then by default
 | 
				
			||||||
 | 
					Promtail wil ship Loki the systemd journal of the host. That will include all
 | 
				
			||||||
 | 
					logs from all addons, supervisor, home assistant, docker, and the host system
 | 
				
			||||||
 | 
					itself. No additional configuration is required if that's the setup you want.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The configuration options can be used to encrypt traffic to Loki via SSL or
 | 
				
			||||||
 | 
					limit access via mTLS. If you change those though, make sure to update your
 | 
				
			||||||
 | 
					Promtail (or whatever client your using) config accordingly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Additionally, if you are an expert and want to take full control over Loki's
 | 
				
			||||||
 | 
					configuration there's an option to provide a custom config file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _Remember to restart the add-on when the configuration is changed._
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example add-on configuration:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					ssl: true
 | 
				
			||||||
 | 
					certfile: fullchain.pem
 | 
				
			||||||
 | 
					keyfile: privkey.pem
 | 
				
			||||||
 | 
					days_to_keep: 30
 | 
				
			||||||
 | 
					log_level: info
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _This is just an example, don't copy and paste it! Create your own!_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `ssl`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Enables/Disables SSL (HTTPS). Set it `true` to enable it, `false` otherwise.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `certfile`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The certificate file to use for SSL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _The file MUST be stored in `/ssl/`, which is the default_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `keyfile`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The private key file to use for SSL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _The file MUST be stored in `/ssl/`, which is the default_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `cafile`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The CA certificate file used to sign client certificates. If set,cclients will
 | 
				
			||||||
 | 
					be required to present a valid client-authentication certificate to connect to
 | 
				
			||||||
 | 
					Loki (mTLS).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: _The file MUST be stored in `/ssl/`, which is the default_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `days_to_keep`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Number of days of logs to keep, older logs will be purged from the index. If set,
 | 
				
			||||||
 | 
					minimum is `1`, defaults to `30` if omitted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The minimum exists because `0` tells Loki to keep tables indefinitely (and the
 | 
				
			||||||
 | 
					addon to grow without bound). See [retention][loki-doc-retention] for more information
 | 
				
			||||||
 | 
					on how Loki's Compactor handles retention.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: This sets an environmental variable referenced in the [default config][addon-default-config].
 | 
				
			||||||
 | 
					If you use `config_path` below it is ignored unless you reference the same variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Option: `config_path`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Absolute path to a custom config file for Loki. By default this addon will run
 | 
				
			||||||
 | 
					Loki using the config file [here][addon-default-config]. If you would prefer different
 | 
				
			||||||
 | 
					options then you can create your own config file to use instead and provide the
 | 
				
			||||||
 | 
					path to it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Review the [documentation][loki-doc] to learn about creating a config file for
 | 
				
			||||||
 | 
					Loki. You can also see examples [here][loki-doc-examples]. I would also strongly
 | 
				
			||||||
 | 
					recommend reading the [Loki best practices][loki-doc-best-practices] guide before
 | 
				
			||||||
 | 
					proceeding with a custom config.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: `http_listen_address`, `http_listen_port` and `log_level` are set by
 | 
				
			||||||
 | 
					the add-on via CLI params so they cannot be changed. Everything else can be configured
 | 
				
			||||||
 | 
					in your file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Port: `3100/tcp`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is the port that Loki is listening on and that clients such as Promtail
 | 
				
			||||||
 | 
					should point at.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Note**: If you just want to send logs from the Promtail add-on to this one
 | 
				
			||||||
 | 
					you can leave this disabled. Setting it exposes the port on the host so you
 | 
				
			||||||
 | 
					only need to do that if you want other systems to ship logs to Loki.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## PLG Stack (Promtail, Loki and Grafana)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Loki isn't a standalone application, it doesn't do anything until you set up another
 | 
				
			||||||
 | 
					utility to send logs to it. It's job is to receive logs, index them, and make them
 | 
				
			||||||
 | 
					available to analysis tools such as Grafana. Loki typically expects to be deployed
 | 
				
			||||||
 | 
					in the full PLG stack:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Promtail to process and ship logs
 | 
				
			||||||
 | 
					- Loki to aggregate and index them
 | 
				
			||||||
 | 
					- Grafana to visualize and monitor them
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Promtail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Promtail is also made by Grafana, its only job is to scrape logs and send them
 | 
				
			||||||
 | 
					to Loki. The easiest way to get it set up is to install the
 | 
				
			||||||
 | 
					Promtail add-on in this same repository.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon-promtail]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This isn't the only way to get logs into Loki though. You may want to deploy
 | 
				
			||||||
 | 
					Promtail yourself to ship logs from other systems, you can find installation
 | 
				
			||||||
 | 
					instructions for that [here][promtail-doc-installation].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Other clients besides Promtail can also be configured to ship their logs to
 | 
				
			||||||
 | 
					Loki. The list of supported clients and how to set them up can be found [here][loki-doc-clients]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Grafana
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grafana's flagship product is their [analysis and visualization tool][grafana]
 | 
				
			||||||
 | 
					and it is very easy to connect that to Loki (as you'd likely expect). They have
 | 
				
			||||||
 | 
					a guide on how to connect the two [here][loki-in-grafana].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The easiest way to install Grafana is to use the
 | 
				
			||||||
 | 
					Grafana community add-on. From there you can follow the guide above to add Loki
 | 
				
			||||||
 | 
					as a data source. When prompted for Loki's URL in the Grafana add-on, use `http://39bd2704-loki:3100`
 | 
				
			||||||
 | 
					(or `https://39bd2704-loki:3100` if you enabled SSL).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[![Open your Home Assistant instance and show the dashboard of a Supervisor add-on.][add-addon-shield]][add-addon-grafana]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### LogCLI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Not required, but if you want to be able to interface with Loki via the
 | 
				
			||||||
 | 
					commandline for testing or scripting purposes you can set up [LogCLI][logcli].
 | 
				
			||||||
 | 
					This will then let you query Loki using [LogQL][logql].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To make LogCLI accessible in the SSH add-ons you can set this install script
 | 
				
			||||||
 | 
					to run on startup of the add-on:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set up LogCLI (not available in alpine linux)
 | 
				
			||||||
 | 
					# On 2.1.0 (see https://github.com/grafana/loki/releases )
 | 
				
			||||||
 | 
					VERSION=2.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APKARCH="$(apk --print-arch)"
 | 
				
			||||||
 | 
					case "$APKARCH" in
 | 
				
			||||||
 | 
					  x86_64)  BINARCH='amd64' ;;
 | 
				
			||||||
 | 
					  armhf)   BINARCH='arm' ;;
 | 
				
			||||||
 | 
					  armv7)   BINARCH='arm' ;;
 | 
				
			||||||
 | 
					  aarch64) BINARCH='arm64' ;;
 | 
				
			||||||
 | 
					  *) echo >&2 "error: unsupported architecture ($APKARCH)"; exit 1 ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					curl -J -L -o /tmp/logcli.zip "https://github.com/grafana/loki/releases/download/v${VERSION}/logcli-linux-${BINARCH}.zip"
 | 
				
			||||||
 | 
					unzip /tmp/logcli.zip -d /usr/bin
 | 
				
			||||||
 | 
					mv "/usr/bin/logcli-linux-${BINARCH}" /usr/bin/logcli
 | 
				
			||||||
 | 
					chmod a+x /usr/bin/logcli
 | 
				
			||||||
 | 
					rm -f /tmp/logcli.zip
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You also need to add the following to your `.bash_profile` or `.zshrc` file:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					export LOKI_ADDR=http://39bd2704-loki:3100
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Switch to `https` if you enabled SSL. The LogCLI doc has the full list of
 | 
				
			||||||
 | 
					possible exports you may need depending on how you deployed Loki.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										99
									
								
								loki/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					# https://github.com/hassio-addons/addon-base/releases
 | 
				
			||||||
 | 
					ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# hadolint ignore=DL3006
 | 
				
			||||||
 | 
					FROM ${BUILD_FROM}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/grafana/loki/releases
 | 
				
			||||||
 | 
					ARG LOKI_VERSION=3.2.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# add Loki and Nginx
 | 
				
			||||||
 | 
					RUN set -eux; \
 | 
				
			||||||
 | 
					    apk update; \
 | 
				
			||||||
 | 
					    \
 | 
				
			||||||
 | 
					    apk add --no-cache --virtual .build-deps \
 | 
				
			||||||
 | 
					        unzip=6.0-r9 \
 | 
				
			||||||
 | 
					        ; \
 | 
				
			||||||
 | 
					    APKARCH="$(apk --print-arch)"; \
 | 
				
			||||||
 | 
					    case "$APKARCH" in \
 | 
				
			||||||
 | 
					        x86_64)  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/loki.zip \
 | 
				
			||||||
 | 
					        "https://github.com/grafana/loki/releases/download/v${LOKI_VERSION}/loki-linux-${BINARCH}.zip"; \
 | 
				
			||||||
 | 
					    unzip /tmp/loki.zip -d /usr/bin; \
 | 
				
			||||||
 | 
					    mv /usr/bin/loki-linux-${BINARCH} /usr/bin/loki; \
 | 
				
			||||||
 | 
					    chmod a+x /usr/bin/loki; \
 | 
				
			||||||
 | 
					    rm /tmp/loki.zip; \
 | 
				
			||||||
 | 
					    apk del .build-deps; \
 | 
				
			||||||
 | 
					    \
 | 
				
			||||||
 | 
					    apk add --no-cache \
 | 
				
			||||||
 | 
					        ca-certificates=20220614-r0 \
 | 
				
			||||||
 | 
					        nginx=1.22.0-r1 \
 | 
				
			||||||
 | 
					        ; \
 | 
				
			||||||
 | 
					    update-ca-certificates; \
 | 
				
			||||||
 | 
					    nginx -v; \
 | 
				
			||||||
 | 
					    rm -f -r /etc/nginx; \
 | 
				
			||||||
 | 
					    mkdir -p \
 | 
				
			||||||
 | 
					        /var/lib/nginx/tmp/client_body \
 | 
				
			||||||
 | 
					        /var/lib/nginx/tmp/fastcgi \
 | 
				
			||||||
 | 
					        /var/lib/nginx/tmp/proxy \
 | 
				
			||||||
 | 
					        /var/lib/nginx/tmp/scgi \
 | 
				
			||||||
 | 
					        /var/lib/nginx/tmp/uwsgi \
 | 
				
			||||||
 | 
					        /var/log/nginx \
 | 
				
			||||||
 | 
					        /run/nginx \
 | 
				
			||||||
 | 
					        ; \
 | 
				
			||||||
 | 
					    touch /var/log/nginx/error.log; \
 | 
				
			||||||
 | 
					    \
 | 
				
			||||||
 | 
					    echo "Add user for Loki"; \
 | 
				
			||||||
 | 
					    mkdir -p /data/loki; \
 | 
				
			||||||
 | 
					    addgroup -S abc; \
 | 
				
			||||||
 | 
					    adduser -u 12345 -h /data/loki -D -S abc -G abc; \
 | 
				
			||||||
 | 
					    \
 | 
				
			||||||
 | 
					    chown -R abc:abc \
 | 
				
			||||||
 | 
					        /usr/lib/nginx \
 | 
				
			||||||
 | 
					        /usr/share/nginx \
 | 
				
			||||||
 | 
					        /var/lib/nginx \
 | 
				
			||||||
 | 
					        /var/log/nginx \
 | 
				
			||||||
 | 
					        ; \
 | 
				
			||||||
 | 
					    chmod +x /etc/cont-init.d/nginx.sh;\
 | 
				
			||||||
 | 
					    chmod +x /etc/services.d/loki/*; \
 | 
				
			||||||
 | 
					    chmod +x /etc/services.d/nginx/*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See https://github.com/grafana/loki/issues/1928
 | 
				
			||||||
 | 
					RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY --chown=abc:abc rootfs /
 | 
				
			||||||
 | 
					WORKDIR /data/loki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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="mdegat01" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.title="${BUILD_NAME}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.vendor="mdegat01's Home Assistant Add-ons" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.authors="mdegat01" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.licenses="MIT" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.url="https://github.com/mdegat01/hassio-addons" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
 | 
				
			||||||
 | 
					    org.opencontainers.image.created=${BUILD_DATE} \
 | 
				
			||||||
 | 
					    org.opencontainers.image.revision=${BUILD_REF} \
 | 
				
			||||||
 | 
					    org.opencontainers.image.version=${BUILD_VERSION}
 | 
				
			||||||
							
								
								
									
										139
									
								
								loki/apparmor.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,139 @@
 | 
				
			|||||||
 | 
					include <tunables/global>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Nginx data dirs
 | 
				
			||||||
 | 
					@{nginx_data}=@{do_usr}/lib/nginx/ @{do_usr}/share/nginx/ @{do_var}/lib/nginx/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					profile loki flags=(attach_disconnected,mediate_deleted) {
 | 
				
			||||||
 | 
					  include <abstractions/base>
 | 
				
			||||||
 | 
					  include <abstractions/bash>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Send signals to child services
 | 
				
			||||||
 | 
					  signal (send) peer=@{profile_name}//*,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Network access
 | 
				
			||||||
 | 
					  network tcp,
 | 
				
			||||||
 | 
					  network udp,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Capabilities to run service as non-root
 | 
				
			||||||
 | 
					  capability kill,
 | 
				
			||||||
 | 
					  capability dac_override,
 | 
				
			||||||
 | 
					  capability chown,
 | 
				
			||||||
 | 
					  capability fowner,
 | 
				
			||||||
 | 
					  capability fsetid,
 | 
				
			||||||
 | 
					  capability setuid,
 | 
				
			||||||
 | 
					  capability setgid,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # 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}/ssl1.1/openssl.cnf                r,
 | 
				
			||||||
 | 
					  @{do_etc}/{group,hosts,passwd,resolv.conf}  r,
 | 
				
			||||||
 | 
					  /dev/null                                   k,
 | 
				
			||||||
 | 
					  # Needed for v2, not v3
 | 
				
			||||||
 | 
					  @{do_etc}/s6/**                         rix,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Bashio
 | 
				
			||||||
 | 
					  /usr/lib/bashio/**                          ix,
 | 
				
			||||||
 | 
					  /tmp/**                                     rw,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Options.json & addon data
 | 
				
			||||||
 | 
					  /data                                       r,
 | 
				
			||||||
 | 
					  /data/**                                    rw,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Needed for setup
 | 
				
			||||||
 | 
					  @{do_etc}/{loki,nginx}/{,**}                rw,
 | 
				
			||||||
 | 
					  @{nginx_data}/{,**}                         rw,
 | 
				
			||||||
 | 
					  @{do_var}/log/nginx/{,**}                   rw,
 | 
				
			||||||
 | 
					  /{share,ssl}/{,**}                          r,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Programs
 | 
				
			||||||
 | 
					  /usr/bin/loki                               cx -> loki,
 | 
				
			||||||
 | 
					  /usr/sbin/nginx                             Cx -> nginx,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  profile loki flags=(attach_disconnected,mediate_deleted) {
 | 
				
			||||||
 | 
					    include <abstractions/base>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Receive signals from s6
 | 
				
			||||||
 | 
					    signal (receive) peer=*_loki,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Network access
 | 
				
			||||||
 | 
					    network tcp,
 | 
				
			||||||
 | 
					    network udp,
 | 
				
			||||||
 | 
					    network netlink raw,
 | 
				
			||||||
 | 
					    network unix dgram,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Addon data
 | 
				
			||||||
 | 
					    /data/**                                  r,
 | 
				
			||||||
 | 
					    /data/loki/**                             rwk,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Config
 | 
				
			||||||
 | 
					    @{do_etc}/loki/*                          r,
 | 
				
			||||||
 | 
					    /share/**                                 r,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Runtime usage
 | 
				
			||||||
 | 
					    owner /tmp/**                             rwk,
 | 
				
			||||||
 | 
					    /usr/bin/loki                             rm,
 | 
				
			||||||
 | 
					    @{do_etc}/hosts                           r,
 | 
				
			||||||
 | 
					    @{do_etc}/{nsswitch,resolv}.conf          r,
 | 
				
			||||||
 | 
					    @{PROC}/sys/net/core/somaxconn            r,
 | 
				
			||||||
 | 
					    @{PROC}/@{pid}/cpuset                     r,
 | 
				
			||||||
 | 
					    @{sys}/kernel/mm/transparent_hugepage/hpage_pmd_size r,
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  profile nginx flags=(attach_disconnected,mediate_deleted) {
 | 
				
			||||||
 | 
					    include <abstractions/base>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Receive signals from s6
 | 
				
			||||||
 | 
					    signal (receive) peer=*_loki,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Network access
 | 
				
			||||||
 | 
					    network tcp,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Capabilities to lower privileges
 | 
				
			||||||
 | 
					    capability dac_override,
 | 
				
			||||||
 | 
					    capability mknod,
 | 
				
			||||||
 | 
					    capability setuid,
 | 
				
			||||||
 | 
					    capability setgid,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Allow parent to ptrace
 | 
				
			||||||
 | 
					    ptrace (read) peer=*_loki,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Config files
 | 
				
			||||||
 | 
					    @{do_etc}/nginx/**                        r,
 | 
				
			||||||
 | 
					    /ssl/**                                   r,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Service data
 | 
				
			||||||
 | 
					    @{do_var}/lib/nginx/tmp/**                rw,
 | 
				
			||||||
 | 
					    @{do_var}/log/nginx/*                     w,
 | 
				
			||||||
 | 
					    @{nginx_data}/**                          r,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Runtime usage
 | 
				
			||||||
 | 
					    @{do_run}/nginx.pid                       rw,
 | 
				
			||||||
 | 
					    @{PROC}/1/fd/1                            w,
 | 
				
			||||||
 | 
					    /usr/sbin/nginx                           rm,
 | 
				
			||||||
 | 
					    @{do_etc}/{group,passwd}                  r,
 | 
				
			||||||
 | 
					    @{do_etc}/ssl/openssl.cnf                 r,
 | 
				
			||||||
 | 
					    @{do_etc}/ssl1.1/openssl.cnf              r,
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								loki/build.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					build_from:
 | 
				
			||||||
 | 
					  amd64: ghcr.io/hassio-addons/base/amd64:16.3.4
 | 
				
			||||||
 | 
					  armhf: ghcr.io/hassio-addons/base/armhf:16.3.4
 | 
				
			||||||
 | 
					  armv7: ghcr.io/hassio-addons/base/armv7:16.3.4
 | 
				
			||||||
 | 
					  aarch64: ghcr.io/hassio-addons/base/aarch64:16.3.4
 | 
				
			||||||
 | 
					codenotary:
 | 
				
			||||||
 | 
					  base_image: codenotary@frenck.dev
 | 
				
			||||||
 | 
					  signer: codenotary@degatano.com
 | 
				
			||||||
							
								
								
									
										34
									
								
								loki/config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: Loki
 | 
				
			||||||
 | 
					url: hhttps://mezgit.duckdns.org/mezned/HAddons
 | 
				
			||||||
 | 
					version: edge
 | 
				
			||||||
 | 
					slug: loki
 | 
				
			||||||
 | 
					arch:
 | 
				
			||||||
 | 
					  - aarch64
 | 
				
			||||||
 | 
					  - amd64
 | 
				
			||||||
 | 
					  - armv7
 | 
				
			||||||
 | 
					  - armhf
 | 
				
			||||||
 | 
					description: Loki for Home Assistant
 | 
				
			||||||
 | 
					codenotary: codenotary@degatano.com
 | 
				
			||||||
 | 
					init: false
 | 
				
			||||||
 | 
					startup: system
 | 
				
			||||||
 | 
					map:
 | 
				
			||||||
 | 
					  - share
 | 
				
			||||||
 | 
					  - ssl
 | 
				
			||||||
 | 
					watchdog: http://[HOST]:3101/ready
 | 
				
			||||||
 | 
					ports:
 | 
				
			||||||
 | 
					  3100/tcp:
 | 
				
			||||||
 | 
					ports_description:
 | 
				
			||||||
 | 
					  3100/tcp: HTTP listen port
 | 
				
			||||||
 | 
					options:
 | 
				
			||||||
 | 
					  ssl: false
 | 
				
			||||||
 | 
					  days_to_keep: 30
 | 
				
			||||||
 | 
					  log_level: info
 | 
				
			||||||
 | 
					schema:
 | 
				
			||||||
 | 
					  ssl: bool
 | 
				
			||||||
 | 
					  certfile: str?
 | 
				
			||||||
 | 
					  keyfile: str?
 | 
				
			||||||
 | 
					  cafile: str?
 | 
				
			||||||
 | 
					  days_to_keep: int(1,)?
 | 
				
			||||||
 | 
					  config_path: str?
 | 
				
			||||||
 | 
					  log_level: list(trace|debug|info|notice|warning|error|fatal)?
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								loki/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								loki/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										52
									
								
								loki/rootfs/etc/cont-init.d/nginx.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/with-contenv bashio
 | 
				
			||||||
 | 
					# shellcheck shell=bash
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					# This file configures nginx
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					readonly NGINX_SERVERS=/etc/nginx/servers
 | 
				
			||||||
 | 
					readonly NGINX_CONF="${NGINX_SERVERS}/direct.conf"
 | 
				
			||||||
 | 
					declare certfile
 | 
				
			||||||
 | 
					declare keyfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bashio::config.require.ssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.true 'ssl'; then
 | 
				
			||||||
 | 
					    bashio::log.info 'Setting up SSL...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    certfile=$(bashio::config 'certfile')
 | 
				
			||||||
 | 
					    keyfile=$(bashio::config 'keyfile')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ! bashio::config.is_empty 'cafile'; then
 | 
				
			||||||
 | 
					        bashio::log.info 'Setting up mTLS...'
 | 
				
			||||||
 | 
					        cafile=$(bashio::config 'cafile')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Absolute path support deprecated 4/21 for release 1.5.0.
 | 
				
			||||||
 | 
					        # Wait until at least 5/21 to remove
 | 
				
			||||||
 | 
					        if [[ $cafile =~ ^\/ ]]; then
 | 
				
			||||||
 | 
					            bashio::log.warning "Providing an absolute path for 'cafile' is deprecated."
 | 
				
			||||||
 | 
					            bashio::log.warning "Support for absolute paths will be removed in a future release."
 | 
				
			||||||
 | 
					            bashio::log.warning "Please put your CA file in /ssl and provide a relative path."
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            cafile="/ssl/${cafile}"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						    mv "${NGINX_SERVERS}/direct-mtls.disabled" "${NGINX_CONF}"
 | 
				
			||||||
 | 
						    sed -i "s#%%cafile%%#${cafile}#g" "${NGINX_CONF}"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        mv "${NGINX_SERVERS}/direct-ssl.disabled" "${NGINX_CONF}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
						    
 | 
				
			||||||
 | 
					    sed -i "s#%%certfile%%#${certfile}#g" "${NGINX_CONF}"
 | 
				
			||||||
 | 
					    sed -i "s#%%keyfile%%#${keyfile}#g" "${NGINX_CONF}"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    mv "${NGINX_SERVERS}/direct.disabled" "${NGINX_CONF}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
							
								
								
									
										52
									
								
								loki/rootfs/etc/loki/default-config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					auth_enabled: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					server: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ingester:
 | 
				
			||||||
 | 
					  lifecycler:
 | 
				
			||||||
 | 
					    address: 127.0.0.1
 | 
				
			||||||
 | 
					    ring:
 | 
				
			||||||
 | 
					      kvstore:
 | 
				
			||||||
 | 
					        store: inmemory
 | 
				
			||||||
 | 
					      replication_factor: 1
 | 
				
			||||||
 | 
					    final_sleep: 0s
 | 
				
			||||||
 | 
					  chunk_idle_period: 1h
 | 
				
			||||||
 | 
					  max_chunk_age: 1h
 | 
				
			||||||
 | 
					  chunk_target_size: 1048576
 | 
				
			||||||
 | 
					  chunk_retain_period: 30s
 | 
				
			||||||
 | 
					  max_transfer_retries: 0
 | 
				
			||||||
 | 
					  wal:
 | 
				
			||||||
 | 
					    dir: /data/loki/wal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					schema_config:
 | 
				
			||||||
 | 
					  configs:
 | 
				
			||||||
 | 
					    - from: 2020-10-24
 | 
				
			||||||
 | 
					      store: boltdb-shipper
 | 
				
			||||||
 | 
					      object_store: filesystem
 | 
				
			||||||
 | 
					      schema: v11
 | 
				
			||||||
 | 
					      index:
 | 
				
			||||||
 | 
					        prefix: index_
 | 
				
			||||||
 | 
					        period: 24h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					storage_config:
 | 
				
			||||||
 | 
					  boltdb_shipper:
 | 
				
			||||||
 | 
					    active_index_directory: /data/loki/boltdb-shipper-active
 | 
				
			||||||
 | 
					    cache_location: /data/loki/boltdb-shipper-cache
 | 
				
			||||||
 | 
					    cache_ttl: 24h
 | 
				
			||||||
 | 
					    shared_store: filesystem
 | 
				
			||||||
 | 
					  filesystem:
 | 
				
			||||||
 | 
					    directory: /data/loki/chunks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					compactor:
 | 
				
			||||||
 | 
					  working_directory: /data/loki/boltdb-shipper-compactor
 | 
				
			||||||
 | 
					  shared_store: filesystem
 | 
				
			||||||
 | 
					  retention_enabled: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					limits_config:
 | 
				
			||||||
 | 
					  reject_old_samples: true
 | 
				
			||||||
 | 
					  reject_old_samples_max_age: 168h
 | 
				
			||||||
 | 
					  retention_period: ${RETENTION_PERIOD:29d}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chunk_store_config:
 | 
				
			||||||
 | 
					  max_look_back_period: 0s
 | 
				
			||||||
							
								
								
									
										96
									
								
								loki/rootfs/etc/nginx/includes/mime.types
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					types {
 | 
				
			||||||
 | 
					    text/html                                        html htm shtml;
 | 
				
			||||||
 | 
					    text/css                                         css;
 | 
				
			||||||
 | 
					    text/xml                                         xml;
 | 
				
			||||||
 | 
					    image/gif                                        gif;
 | 
				
			||||||
 | 
					    image/jpeg                                       jpeg jpg;
 | 
				
			||||||
 | 
					    application/javascript                           js;
 | 
				
			||||||
 | 
					    application/atom+xml                             atom;
 | 
				
			||||||
 | 
					    application/rss+xml                              rss;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    text/mathml                                      mml;
 | 
				
			||||||
 | 
					    text/plain                                       txt;
 | 
				
			||||||
 | 
					    text/vnd.sun.j2me.app-descriptor                 jad;
 | 
				
			||||||
 | 
					    text/vnd.wap.wml                                 wml;
 | 
				
			||||||
 | 
					    text/x-component                                 htc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    image/png                                        png;
 | 
				
			||||||
 | 
					    image/svg+xml                                    svg svgz;
 | 
				
			||||||
 | 
					    image/tiff                                       tif tiff;
 | 
				
			||||||
 | 
					    image/vnd.wap.wbmp                               wbmp;
 | 
				
			||||||
 | 
					    image/webp                                       webp;
 | 
				
			||||||
 | 
					    image/x-icon                                     ico;
 | 
				
			||||||
 | 
					    image/x-jng                                      jng;
 | 
				
			||||||
 | 
					    image/x-ms-bmp                                   bmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    font/woff                                        woff;
 | 
				
			||||||
 | 
					    font/woff2                                       woff2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    application/java-archive                         jar war ear;
 | 
				
			||||||
 | 
					    application/json                                 json;
 | 
				
			||||||
 | 
					    application/mac-binhex40                         hqx;
 | 
				
			||||||
 | 
					    application/msword                               doc;
 | 
				
			||||||
 | 
					    application/pdf                                  pdf;
 | 
				
			||||||
 | 
					    application/postscript                           ps eps ai;
 | 
				
			||||||
 | 
					    application/rtf                                  rtf;
 | 
				
			||||||
 | 
					    application/vnd.apple.mpegurl                    m3u8;
 | 
				
			||||||
 | 
					    application/vnd.google-earth.kml+xml             kml;
 | 
				
			||||||
 | 
					    application/vnd.google-earth.kmz                 kmz;
 | 
				
			||||||
 | 
					    application/vnd.ms-excel                         xls;
 | 
				
			||||||
 | 
					    application/vnd.ms-fontobject                    eot;
 | 
				
			||||||
 | 
					    application/vnd.ms-powerpoint                    ppt;
 | 
				
			||||||
 | 
					    application/vnd.oasis.opendocument.graphics      odg;
 | 
				
			||||||
 | 
					    application/vnd.oasis.opendocument.presentation  odp;
 | 
				
			||||||
 | 
					    application/vnd.oasis.opendocument.spreadsheet   ods;
 | 
				
			||||||
 | 
					    application/vnd.oasis.opendocument.text          odt;
 | 
				
			||||||
 | 
					    application/vnd.openxmlformats-officedocument.presentationml.presentation
 | 
				
			||||||
 | 
					                                                     pptx;
 | 
				
			||||||
 | 
					    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
 | 
				
			||||||
 | 
					                                                     xlsx;
 | 
				
			||||||
 | 
					    application/vnd.openxmlformats-officedocument.wordprocessingml.document
 | 
				
			||||||
 | 
					                                                     docx;
 | 
				
			||||||
 | 
					    application/vnd.wap.wmlc                         wmlc;
 | 
				
			||||||
 | 
					    application/x-7z-compressed                      7z;
 | 
				
			||||||
 | 
					    application/x-cocoa                              cco;
 | 
				
			||||||
 | 
					    application/x-java-archive-diff                  jardiff;
 | 
				
			||||||
 | 
					    application/x-java-jnlp-file                     jnlp;
 | 
				
			||||||
 | 
					    application/x-makeself                           run;
 | 
				
			||||||
 | 
					    application/x-perl                               pl pm;
 | 
				
			||||||
 | 
					    application/x-pilot                              prc pdb;
 | 
				
			||||||
 | 
					    application/x-rar-compressed                     rar;
 | 
				
			||||||
 | 
					    application/x-redhat-package-manager             rpm;
 | 
				
			||||||
 | 
					    application/x-sea                                sea;
 | 
				
			||||||
 | 
					    application/x-shockwave-flash                    swf;
 | 
				
			||||||
 | 
					    application/x-stuffit                            sit;
 | 
				
			||||||
 | 
					    application/x-tcl                                tcl tk;
 | 
				
			||||||
 | 
					    application/x-x509-ca-cert                       der pem crt;
 | 
				
			||||||
 | 
					    application/x-xpinstall                          xpi;
 | 
				
			||||||
 | 
					    application/xhtml+xml                            xhtml;
 | 
				
			||||||
 | 
					    application/xspf+xml                             xspf;
 | 
				
			||||||
 | 
					    application/zip                                  zip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    application/octet-stream                         bin exe dll;
 | 
				
			||||||
 | 
					    application/octet-stream                         deb;
 | 
				
			||||||
 | 
					    application/octet-stream                         dmg;
 | 
				
			||||||
 | 
					    application/octet-stream                         iso img;
 | 
				
			||||||
 | 
					    application/octet-stream                         msi msp msm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    audio/midi                                       mid midi kar;
 | 
				
			||||||
 | 
					    audio/mpeg                                       mp3;
 | 
				
			||||||
 | 
					    audio/ogg                                        ogg;
 | 
				
			||||||
 | 
					    audio/x-m4a                                      m4a;
 | 
				
			||||||
 | 
					    audio/x-realaudio                                ra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    video/3gpp                                       3gpp 3gp;
 | 
				
			||||||
 | 
					    video/mp2t                                       ts;
 | 
				
			||||||
 | 
					    video/mp4                                        mp4;
 | 
				
			||||||
 | 
					    video/mpeg                                       mpeg mpg;
 | 
				
			||||||
 | 
					    video/quicktime                                  mov;
 | 
				
			||||||
 | 
					    video/webm                                       webm;
 | 
				
			||||||
 | 
					    video/x-flv                                      flv;
 | 
				
			||||||
 | 
					    video/x-m4v                                      m4v;
 | 
				
			||||||
 | 
					    video/x-mng                                      mng;
 | 
				
			||||||
 | 
					    video/x-ms-asf                                   asx asf;
 | 
				
			||||||
 | 
					    video/x-ms-wmv                                   wmv;
 | 
				
			||||||
 | 
					    video/x-msvideo                                  avi;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								loki/rootfs/etc/nginx/includes/proxy_params.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					proxy_http_version          1.1;
 | 
				
			||||||
 | 
					proxy_ignore_client_abort   off;
 | 
				
			||||||
 | 
					proxy_read_timeout          86400s;
 | 
				
			||||||
 | 
					proxy_redirect              off;
 | 
				
			||||||
 | 
					proxy_send_timeout          86400s;
 | 
				
			||||||
 | 
					proxy_max_temp_file_size    0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proxy_set_header Accept-Encoding "";
 | 
				
			||||||
 | 
					proxy_set_header Connection $connection_upgrade;
 | 
				
			||||||
 | 
					proxy_set_header Host $http_host;
 | 
				
			||||||
 | 
					proxy_set_header Upgrade $http_upgrade;
 | 
				
			||||||
 | 
					proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
				
			||||||
 | 
					proxy_set_header X-Forwarded-Proto $scheme;
 | 
				
			||||||
 | 
					proxy_set_header X-NginX-Proxy true;
 | 
				
			||||||
 | 
					proxy_set_header X-Real-IP $remote_addr;
 | 
				
			||||||
							
								
								
									
										6
									
								
								loki/rootfs/etc/nginx/includes/server_params.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					root            /dev/null;
 | 
				
			||||||
 | 
					server_name     $hostname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_header X-Content-Type-Options nosniff;
 | 
				
			||||||
 | 
					add_header X-XSS-Protection "1; mode=block";
 | 
				
			||||||
 | 
					add_header X-Robots-Tag none;
 | 
				
			||||||
							
								
								
									
										8
									
								
								loki/rootfs/etc/nginx/includes/ssl_params.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					ssl_protocols TLSv1.2 TLSv1.3;
 | 
				
			||||||
 | 
					ssl_prefer_server_ciphers off;
 | 
				
			||||||
 | 
					ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
 | 
				
			||||||
 | 
					ssl_session_timeout  10m;
 | 
				
			||||||
 | 
					ssl_session_cache shared:SSL:10m;
 | 
				
			||||||
 | 
					ssl_session_tickets off;
 | 
				
			||||||
 | 
					ssl_stapling on;
 | 
				
			||||||
 | 
					ssl_stapling_verify on;
 | 
				
			||||||
							
								
								
									
										3
									
								
								loki/rootfs/etc/nginx/includes/upstream.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					upstream backend {
 | 
				
			||||||
 | 
						server 127.0.0.1:8080;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								loki/rootfs/etc/nginx/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					# Run nginx in foreground.
 | 
				
			||||||
 | 
					daemon off;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set user
 | 
				
			||||||
 | 
					user abc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Pid storage location.
 | 
				
			||||||
 | 
					pid /var/run/nginx.pid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set number of worker processes.
 | 
				
			||||||
 | 
					worker_processes 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Enables the use of JIT for regular expressions to speed-up their processing.
 | 
				
			||||||
 | 
					pcre_jit on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Write error log to the add-on log.
 | 
				
			||||||
 | 
					error_log /proc/1/fd/1 error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Load dynamic modules.
 | 
				
			||||||
 | 
					include /etc/nginx/modules/*.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Max num of simultaneous connections by a worker process.
 | 
				
			||||||
 | 
					events {
 | 
				
			||||||
 | 
					    worker_connections 512;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					http {
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/mime.types;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    log_format homeassistant '[$time_local] $status '
 | 
				
			||||||
 | 
					                             '$http_x_forwarded_for($remote_addr) '
 | 
				
			||||||
 | 
					                             '$request ($http_user_agent)';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    access_log              off;
 | 
				
			||||||
 | 
					    client_max_body_size    4G;
 | 
				
			||||||
 | 
					    default_type            application/octet-stream;
 | 
				
			||||||
 | 
					    gzip                    on;
 | 
				
			||||||
 | 
					    keepalive_timeout       65;
 | 
				
			||||||
 | 
					    sendfile                on;
 | 
				
			||||||
 | 
					    server_tokens           off;
 | 
				
			||||||
 | 
					    tcp_nodelay             on;
 | 
				
			||||||
 | 
					    tcp_nopush              on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    map $http_upgrade $connection_upgrade {
 | 
				
			||||||
 | 
					        default upgrade;
 | 
				
			||||||
 | 
					        ''      close;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/upstream.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/servers/*.conf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										17
									
								
								loki/rootfs/etc/nginx/servers/direct-mtls.disabled
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					server {
 | 
				
			||||||
 | 
					    listen 3100 default_server ssl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/server_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/ssl_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/proxy_params.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ssl_certificate /ssl/%%certfile%%;
 | 
				
			||||||
 | 
					    ssl_certificate_key /ssl/%%keyfile%%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ssl_client_certificate %%cafile%%;
 | 
				
			||||||
 | 
					    ssl_verify_client on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location / {
 | 
				
			||||||
 | 
					        proxy_pass http://backend;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								loki/rootfs/etc/nginx/servers/direct-ssl.disabled
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					server {
 | 
				
			||||||
 | 
					    listen 3100 default_server ssl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/server_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/ssl_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/proxy_params.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ssl_certificate /ssl/%%certfile%%;
 | 
				
			||||||
 | 
					    ssl_certificate_key /ssl/%%keyfile%%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location / {
 | 
				
			||||||
 | 
					        proxy_pass http://backend;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								loki/rootfs/etc/nginx/servers/direct.disabled
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					server {
 | 
				
			||||||
 | 
					    listen 3100 default_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/server_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/proxy_params.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location / {
 | 
				
			||||||
 | 
					        proxy_pass http://backend;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								loki/rootfs/etc/nginx/servers/ready.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					server {
 | 
				
			||||||
 | 
					    listen 3101 default_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/server_params.conf;
 | 
				
			||||||
 | 
					    include /etc/nginx/includes/proxy_params.conf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location = /ready {
 | 
				
			||||||
 | 
					        proxy_pass http://backend;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location / {
 | 
				
			||||||
 | 
					        return 444;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								loki/rootfs/etc/services.d/loki/finish
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bashio
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant  Add-on: Loki
 | 
				
			||||||
 | 
					# Take down the S6 supervision tree when Loki fails
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										51
									
								
								loki/rootfs/etc/services.d/loki/run
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/with-contenv bashio
 | 
				
			||||||
 | 
					# shellcheck shell=bash
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					# Runs Loki
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					readonly BIND_ADDR=127.0.0.1
 | 
				
			||||||
 | 
					readonly HTTP_PORT=8080
 | 
				
			||||||
 | 
					declare log_level
 | 
				
			||||||
 | 
					loki_config='/etc/loki/default-config.yaml'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bashio::log.info 'Starting Loki...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.exists 'config_path'; then
 | 
				
			||||||
 | 
					    loki_config=$(bashio::config 'config_path')
 | 
				
			||||||
 | 
					    bashio::log.info "Using config at ${loki_config}"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    bashio::log.info "Using default config"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					retention_period="$(bashio::config 'days_to_keep' 1)d"
 | 
				
			||||||
 | 
					bashio::log.info "Retention period set to ${retention_period}"
 | 
				
			||||||
 | 
					export "RETENTION_PERIOD=${retention_period}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 "Loki log level set to ${log_level}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loki_args=(
 | 
				
			||||||
 | 
					    "-config.expand-env=true"
 | 
				
			||||||
 | 
					    "-config.file=${loki_config}"
 | 
				
			||||||
 | 
					    "-server.http-listen-address=${BIND_ADDR}"
 | 
				
			||||||
 | 
					    "-server.http-listen-port=${HTTP_PORT}" 
 | 
				
			||||||
 | 
					    "-log.level=${log_level}"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					if [ "${log_level}" == "debug" ]; then
 | 
				
			||||||
 | 
					    bashio::log.debug "Logging full config on startup for debugging..."
 | 
				
			||||||
 | 
					    loki_args+=("-print-config-stderr=true")
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bashio::log.info "Handing over control to Loki..."
 | 
				
			||||||
 | 
					exec s6-setuidgid abc \
 | 
				
			||||||
 | 
					    /usr/bin/loki "${loki_args[@]}"
 | 
				
			||||||
							
								
								
									
										13
									
								
								loki/rootfs/etc/services.d/nginx/finish
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bashio
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					# Take down the S6 supervision tree when Nginx fails
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
							
								
								
									
										10
									
								
								loki/rootfs/etc/services.d/nginx/run
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/with-contenv bashio
 | 
				
			||||||
 | 
					# shellcheck shell=bash
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Add-on: Loki
 | 
				
			||||||
 | 
					# Runs the Nginx daemon
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					bashio::net.wait_for 8080
 | 
				
			||||||
 | 
					bashio::log.info "Starting NGinx..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec /usr/sbin/nginx
 | 
				
			||||||
							
								
								
									
										112
									
								
								prometheus_node_exporter/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					# Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [1.0.1] - 2024-09-11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:16.1.2` to `16.3.0`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [1.0.0] - 2024-07-01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					⚠️ BREAKING CHANGES ⚠️
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.8.1`
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:15.0.8` to `16.1.2`
 | 
				
			||||||
 | 
					- Removes the default username/password
 | 
				
			||||||
 | 
					- Now requires a plaintext password instead of a bcrypt string (the container will bcrypt the password for you)
 | 
				
			||||||
 | 
					  - If you're upgrading from `0.9.1` or any earlier version, you will **NEED** to go to the "Configuration" tab and enter the plaintext version of your password (if you leave the bcrypt hash in the password field, the container will try to hash your already-hashed password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.9.1] - 2024-05-14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:15.0.4` to `15.0.8`
 | 
				
			||||||
 | 
					- Added [CONTRIBUTING.md](https://github.com/loganmarchione/hassos-addons/blob/main/prometheus_node_exporter/CONTRIBUTING.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.9.0] - 2024-05-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.8.0` thanks to [@b-reich](https://github.com/b-reich) in https://github.com/loganmarchione/hassos-addons/pull/49
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.8.2] - 2024-01-16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:15.0.1` to `15.0.4`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.8.1] - 2024-01-11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Published pre-built image to GHCR thanks to [@wozz](https://github.com/wozz) in https://github.com/loganmarchione/hassos-addons/pull/47
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.8.0] - 2023-12-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.7.0`
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:14.1.0` to `15.0.1`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.7.0] - 2023-08-18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.6.1`
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:14.0.0` to `14.1.0`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.6.0] - 2023-05-18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:13.1.3` to `14.0.0`
 | 
				
			||||||
 | 
					- Added support for Prometheus Node Exporter command-line arguments thanks to [@falzm](https://github.com/falzm) in https://github.com/loganmarchione/hassos-addons/pull/34
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.5.0] - 2023-03-16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.5.0`
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:12.2.4` to `13.1.3`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.4.0] - 2022-10-20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:12.2.0` to `12.2.4`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.3.0] - 2022-09-26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.4.0`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.2.1] - 2022-08-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added more logging around TLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.2.0] - 2022-08-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added TLS support thanks to [@Quedale](https://github.com/Quedale) in https://github.com/loganmarchione/hassos-addons/pull/7
 | 
				
			||||||
 | 
					- Mapped Node Exporter config files from `/etc` to `/config`, to allow editing via the [File editor add-on](https://github.com/home-assistant/addons/tree/master/configurator)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.1.1] - 2022-08-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added configuration option descriptions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.1.0] - 2022-07-11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:11.1.2` to `12.2.0` (Alpine Linux 3.16), but also disabled the s6 init system because of [this issue](https://github.com/home-assistant/supervisor/issues/3642)
 | 
				
			||||||
 | 
					- Added CI from [here](https://github.com/hassio-addons/addon-glances/blob/main/.github/workflows/ci.yaml)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.7] - 2022-06-07
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded base image from `ghcr.io/hassio-addons/base/<arch>:11.1.0` to `11.1.2` (this is the last without s6 v3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.6] - 2022-05-17
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fixed S6-overlay v3 problems
 | 
				
			||||||
 | 
					- Added build.json file to better control base image versions
 | 
				
			||||||
 | 
					- Small formatting fixes and readability changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.5] - 2022-02-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added HTTP Basic Auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.4] - 2021-12-29
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Upgraded Node Exporter to `1.3.1`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.3] - 2021-12-12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Built for `armv7` (Raspberry Pi 3B) thanks to [@jaredacox](https://github.com/jaredacox) in https://github.com/loganmarchione/hassos-addons/pull/1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.2] - 2021-11-16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Built for `aarch64` (Raspberry Pi 4B)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [0.0.1] - 2021-11-03
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Initial release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Note
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I'm not making numbered GitHub releases/tags, since this is still a beta project. These release numbers are purely made up.
 | 
				
			||||||
							
								
								
									
										57
									
								
								prometheus_node_exporter/CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					# Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Making changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Currently, this repo pushes a tagged image from `main` to the [packages](https://github.com/users/loganmarchione/packages?repo_name=hassos-addons) tab each time `main` is updated. As such, if you're proposing a change, please update the following files in a PR and DO NOT push directly to `main`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Bump the `version` number in the [config.json](https://github.com/loganmarchione/hassos-addons/blob/main/prometheus_node_exporter/config.json) file
 | 
				
			||||||
 | 
					1. Make whatever changes you need (e.g., bumping the [version of Node Exporter](https://github.com/loganmarchione/hassos-addons/blob/main/prometheus_node_exporter/Dockerfile) or the [version of the base images](https://github.com/loganmarchione/hassos-addons/blob/main/prometheus_node_exporter/build.json))
 | 
				
			||||||
 | 
					1. Add your changes to the [CHANGELOG.md](https://github.com/loganmarchione/hassos-addons/blob/main/prometheus_node_exporter/CHANGELOG.md) file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Testing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I'm still working this out, but am doing testing based on [this page](https://developers.home-assistant.io/docs/add-ons/testing).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					After making your changes, run the command below from the git root directory (i.e., `hassos-addons`) to ensure that the add-on builds successfully (substitute `amd64` with `armhf`, `aarch64`, or `i386` based on your system).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					docker run \
 | 
				
			||||||
 | 
					  --rm \
 | 
				
			||||||
 | 
					  -it \
 | 
				
			||||||
 | 
					  --name builder \
 | 
				
			||||||
 | 
					  --privileged \
 | 
				
			||||||
 | 
					  -v ./prometheus_node_exporter:/data \
 | 
				
			||||||
 | 
					  -v /var/run/docker.sock:/var/run/docker.sock:ro \
 | 
				
			||||||
 | 
					  ghcr.io/home-assistant/amd64-builder \
 | 
				
			||||||
 | 
					  -t /data \
 | 
				
			||||||
 | 
					  --amd64 \
 | 
				
			||||||
 | 
					  --test \
 | 
				
			||||||
 | 
					  -i test-prometheus-node-exporter \
 | 
				
			||||||
 | 
					  -d local
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To test that the add-on actually runs, I've been using my personal instance of Home Assistant 🤷♂️
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Open the Add-ons panel in Home Assistant by going to `Settings-->Add-ons-->Add-on Store`
 | 
				
			||||||
 | 
					1. Uninstall the current Prometheus Node Exporter add-on (the one published from GHCR.io)
 | 
				
			||||||
 | 
					1. Install the official [samba add-on](https://github.com/home-assistant/addons/tree/master/samba)
 | 
				
			||||||
 | 
					1. Enable samba with a username and password
 | 
				
			||||||
 | 
					1. Mount the samba share locally (e.g., Dolphin can use `smb://your_home_assistant_ip_address`)
 | 
				
			||||||
 | 
					1. Navigate to the `addons` directory in the samba share
 | 
				
			||||||
 | 
					1. Copy/paste the entire `prometheus_node_exporter` directory to the `addons` directory in the samba share
 | 
				
			||||||
 | 
					1. In the `config.json` file in the samba share, remove this entire line
 | 
				
			||||||
 | 
					   ```
 | 
				
			||||||
 | 
					   "image": "ghcr.io/loganmarchione/hassos-addons/prometheusnodeexporter-{arch}",
 | 
				
			||||||
 | 
					   ```
 | 
				
			||||||
 | 
					1. Open the Add-ons panel in Home Assistant by going to `Settings-->Add-ons-->Add-on Store`
 | 
				
			||||||
 | 
					1. Click the menu icon in the top-right, then click "Check for updates"
 | 
				
			||||||
 | 
					1. Refresh the page
 | 
				
			||||||
 | 
					1. At the very top, there should be a new section for "Local add-ons" with the "Prometheus Node Exporter" to install
 | 
				
			||||||
 | 
					1. Install the new add-on from the local repository
 | 
				
			||||||
 | 
					   1. Test all configurations
 | 
				
			||||||
 | 
					   1. Make sure log entries line up with configuration settings
 | 
				
			||||||
 | 
					   1. Navigate to `http://your_home_assistant_ip_address:9100/metrics` and ensure that HTTP basic auth works as expected
 | 
				
			||||||
 | 
					1. Stop and uninstall the local add-on
 | 
				
			||||||
 | 
					1. Delete the entire `prometheus_node_exporter` directory in the `addons` directory in the samba share
 | 
				
			||||||
 | 
					1. Disable the samba add-on
 | 
				
			||||||
 | 
					1. Re-install add-on from GHCR.io (you'll need to re-configure the add-on)
 | 
				
			||||||
							
								
								
									
										33
									
								
								prometheus_node_exporter/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					ARG BUILD_FROM
 | 
				
			||||||
 | 
					# hadolint ignore=DL3006
 | 
				
			||||||
 | 
					FROM $BUILD_FROM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set shell
 | 
				
			||||||
 | 
					SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Setup base system
 | 
				
			||||||
 | 
					ARG \
 | 
				
			||||||
 | 
					  BUILD_ARCH \
 | 
				
			||||||
 | 
					  NODE_EXPORTER_VERSION="1.8.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copy root filesystem
 | 
				
			||||||
 | 
					COPY rootfs /
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# hadolint ignore=DL3003,DL3018
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					    apk add --no-cache --update apache2-utils tar \
 | 
				
			||||||
 | 
					    && ARCH="${BUILD_ARCH}" \
 | 
				
			||||||
 | 
					    && if [ "${BUILD_ARCH}" = "aarch64" ]; then ARCH="arm64"; fi \
 | 
				
			||||||
 | 
					    && curl -J -L -o /tmp/node_exporter.tar.gz \
 | 
				
			||||||
 | 
					       "https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-${ARCH}.tar.gz" \
 | 
				
			||||||
 | 
					    && cd /tmp \
 | 
				
			||||||
 | 
					    && tar -xzvf node_exporter.tar.gz --strip-components=1 \
 | 
				
			||||||
 | 
					    && mv node_exporter /usr/local/bin/ \
 | 
				
			||||||
 | 
					    && adduser -s /bin/false -D -H prometheus \
 | 
				
			||||||
 | 
					    && chown -R prometheus:prometheus /usr/local/bin/node_exporter \
 | 
				
			||||||
 | 
					    && rm -rf /tmp/node_exporter* LICENSE NOTICE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This add-on runs on the host pid namespace, making it impossible
 | 
				
			||||||
 | 
					# to use S6-Overlay. Therefore the init system is disabled at this point.
 | 
				
			||||||
 | 
					ENTRYPOINT []
 | 
				
			||||||
 | 
					CMD ["/run.sh"]
 | 
				
			||||||
							
								
								
									
										93
									
								
								prometheus_node_exporter/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					# prometheus_node_exporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[](https://github.com/loganmarchione/hassos-addons/actions/workflows/main.yml)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The Prometheus [Node Exporter](https://github.com/prometheus/node_exporter) for hardware and OS metrics exposed by \*NIX kernels.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Add my [repository](https://github.com/loganmarchione/hassos-addons). The URL is `https://github.com/loganmarchione/hassos-addons`.
 | 
				
			||||||
 | 
					1. Search for the "Prometheus Node Exporter" add-on in the Supervisor add-on store and install it.
 | 
				
			||||||
 | 
					1. Disable "Protection mode" in the add-on panel.
 | 
				
			||||||
 | 
					1. Optional - Check the `Configuration` tab of the add-on to make any changes you'd like.
 | 
				
			||||||
 | 
					1. Start the add-on.
 | 
				
			||||||
 | 
					1. Check the `Logs` tab of the add-on to see if everything went well.
 | 
				
			||||||
 | 
					1. To verify the metrics are available, visit `http://your_home_assistant_ip_address:9100/metrics` in your browser, or use curl: `curl -X GET http://your_home_assistant_ip_address:9100/metrics`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default, Prometheus Node Exporter listens on TCP port 9100.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### HTTP Basic Authentication
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[HTTP Basic Auth](https://en.wikipedia.org/wiki/Basic_access_authentication) is disabled by default. If you want to enable HTTP Basic Auth:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. set `enable_basic_auth` to true
 | 
				
			||||||
 | 
					1. enter the `basic_auth_user` and `basic_auth_pass`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### TLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TLS is disabled by default. If you want to enable TLS:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. set `enable_tls` to true
 | 
				
			||||||
 | 
					1. enter the `cert_file` and `cert_key`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					⚠️ Note that the `cert_file` and `cert_key` need to be a `/path/to/fullchain.pem` and `/path/to/privkey.pem`, respectively (`/config` and `/ssl` are mapped to this add-on) ⚠️
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Command-line arguments
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This option allows you to pass command-line arguments directly to Prometheus Node Exporter. This is particularly useful to adjust which [collectors](https://github.com/prometheus/node_exporter/#collectors) run. For example, to disable all collectors except the `cpu` collector, you can use this string: `--collector.disable-defaults --collector.cpu`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Usage (in Prometheus server)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Add the following to the `/etc/prometheus/prometheus.yml` config file on your Prometheus server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					scrape_configs:
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					  - job_name: 'homeassistant'
 | 
				
			||||||
 | 
					    static_configs:
 | 
				
			||||||
 | 
					    - targets: ['your_home_assistant_ip_address:9100']
 | 
				
			||||||
 | 
					    basic_auth:
 | 
				
			||||||
 | 
					      username: username_goes_here
 | 
				
			||||||
 | 
					      password: password_goes_here
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following Prometheus query should return data:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					node_uname_info{job="homeassistant"}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Tested on `amd64` and `aarch64` (Raspberry Pi 4B) platforms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WIP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Known issues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [ ] The "Open Web UI" button doesn't work when Home Assistant is behind a reverse proxy.
 | 
				
			||||||
 | 
					- [x] Only tested on `amd64` builds.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [x] Add HTTP Basic Auth
 | 
				
			||||||
 | 
					- [x] Add abilty to enter plain-text password instead of bcyrpt-ed hash
 | 
				
			||||||
 | 
					- [x] Add TLS
 | 
				
			||||||
 | 
					- [x] Per [this comment](https://community.home-assistant.io/t/hello-world-example-addon-from-developer-docs-stopped-working-s6-overlay-issue/421486/7), setup container images on a registry (DockerHub or GitHub) so that users aren't building the container with each install (would have prevented [this issue](https://github.com/loganmarchione/hassos-addons/issues/2))
 | 
				
			||||||
 | 
					- [x] Investigate CI/CD for this repo, specifically [this](https://github.com/home-assistant/actions) and [this](https://github.com/hassio-addons/addon-glances/blob/main/.github/workflows/ci.yaml) as an example
 | 
				
			||||||
 | 
					- [ ] Investigate dropping API access (e.g., `hassio_api`, `homeassistant_api`, `auth_api`) in order to get my rating up
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## FAQ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Doesn't Home Assistant already have Prometheus integration?
 | 
				
			||||||
 | 
					  - Yes, but the [official integration](https://www.home-assistant.io/integrations/prometheus/) only exposes entity-related metrics, not host-related metrics.
 | 
				
			||||||
 | 
					- Isn't there already an Prometheus add-on?
 | 
				
			||||||
 | 
					  - Yes, but that [add-on](https://github.com/hassio-addons/addon-prometheus) is for Prometheus server, not the node exporter.
 | 
				
			||||||
 | 
					- Why does this add-on require so many permissions?
 | 
				
			||||||
 | 
					  - The add-on needs to access to host-level metrics (CPU, memory, disk, etc...). As such, I have requested all possible permissions. Please inspect the code of this add-on before you run it.
 | 
				
			||||||
							
								
								
									
										7
									
								
								prometheus_node_exporter/build.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "build_from": {
 | 
				
			||||||
 | 
					    "amd64": "ghcr.io/hassio-addons/base/amd64:16.3.0",
 | 
				
			||||||
 | 
					    "aarch64": "ghcr.io/hassio-addons/base/aarch64:16.3.0",
 | 
				
			||||||
 | 
					    "armv7": "ghcr.io/hassio-addons/base/armv7:16.3.0"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										47
									
								
								prometheus_node_exporter/config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Prometheus Node Exporter",
 | 
				
			||||||
 | 
					  "version": "1.0.1",
 | 
				
			||||||
 | 
					  "slug": "prometheus_node_exporter",
 | 
				
			||||||
 | 
					  "description": "Prometheus node exporter for hardware and OS metrics",
 | 
				
			||||||
 | 
					  "url": "https://mezgit.duckdns.org/mezned/HAddons",
 | 
				
			||||||
 | 
					  "image": "ghcr.io/loganmarchione/hassos-addons/prometheusnodeexporter-{arch}",
 | 
				
			||||||
 | 
					  "arch": ["amd64", "aarch64", "armv7"],
 | 
				
			||||||
 | 
					  "startup": "services",
 | 
				
			||||||
 | 
					  "init": false,
 | 
				
			||||||
 | 
					  "webui": "[PROTO:enable_tls]://[HOST]:[PORT:9100]",
 | 
				
			||||||
 | 
					  "ports": {
 | 
				
			||||||
 | 
					    "9100/tcp": 9100
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "ports_description": {
 | 
				
			||||||
 | 
					    "9100/tcp": "Default node exporter port and web interface"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "map": [
 | 
				
			||||||
 | 
					    "config:rw",
 | 
				
			||||||
 | 
					    "ssl"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "hassio_api": true,
 | 
				
			||||||
 | 
					  "homeassistant_api": true,
 | 
				
			||||||
 | 
					  "auth_api": true,
 | 
				
			||||||
 | 
					  "docker_api": true,
 | 
				
			||||||
 | 
					  "host_network": true,
 | 
				
			||||||
 | 
					  "host_pid": true,
 | 
				
			||||||
 | 
					  "apparmor": false,
 | 
				
			||||||
 | 
					  "options": {
 | 
				
			||||||
 | 
					    "enable_basic_auth": false,
 | 
				
			||||||
 | 
					    "basic_auth_user": "",
 | 
				
			||||||
 | 
					    "basic_auth_pass": "",
 | 
				
			||||||
 | 
					    "enable_tls": false,
 | 
				
			||||||
 | 
					    "cert_file": "",
 | 
				
			||||||
 | 
					    "cert_key": "",
 | 
				
			||||||
 | 
					    "cmdline_extra_args": ""
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "schema": {
 | 
				
			||||||
 | 
					    "enable_basic_auth": "bool",
 | 
				
			||||||
 | 
					    "basic_auth_user": "str",
 | 
				
			||||||
 | 
					    "basic_auth_pass": "password",
 | 
				
			||||||
 | 
					    "enable_tls": "bool",
 | 
				
			||||||
 | 
					    "cert_file": "str",
 | 
				
			||||||
 | 
					    "cert_key": "str",
 | 
				
			||||||
 | 
					    "cmdline_extra_args": "str?"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								prometheus_node_exporter/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								prometheus_node_exporter/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bashio
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Community Add-on: Prometheus Node Exporter
 | 
				
			||||||
 | 
					# Configures Prometheus Node Exporter
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					bashio::require.unprotected
 | 
				
			||||||
 | 
					echo "${SUPERVISOR_TOKEN}" > '/run/home-assistant.token'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Even if the user isn't using these options, we're creating the web config file
 | 
				
			||||||
 | 
					# This will allow us to append to the web config file as needed (based on variables)
 | 
				
			||||||
 | 
					# Prometheus Node Exporter will run with a blank web config file in the meantime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config_dir=/config
 | 
				
			||||||
 | 
					web_config_dir=$config_dir/prometheus_node_exporter
 | 
				
			||||||
 | 
					mkdir -p $web_config_dir
 | 
				
			||||||
 | 
					chmod 750 $web_config_dir
 | 
				
			||||||
 | 
					chown root:prometheus $web_config_dir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					web_config_file=$web_config_dir/node_exporter_web.yml
 | 
				
			||||||
 | 
					rm -f $web_config_file
 | 
				
			||||||
 | 
					touch $web_config_file
 | 
				
			||||||
 | 
					chmod 740 $web_config_file
 | 
				
			||||||
 | 
					chown root:prometheus $web_config_file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Poor man's debugger: check permissions on web config file
 | 
				
			||||||
 | 
					#ls -la $web_config_file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bashio::log.info "Add-on info - name:     $(bashio::addon.name)"
 | 
				
			||||||
 | 
					bashio::log.info "Add-on info - version:  $(bashio::addon.version)"
 | 
				
			||||||
 | 
					bashio::log.info "Add-on info - hostname: $(bashio::addon.hostname)"
 | 
				
			||||||
 | 
					bashio::log.info "Add-on info - DNS name: $(bashio::addon.dns)"
 | 
				
			||||||
 | 
					bashio::log.info "Checking configuration options..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#####################
 | 
				
			||||||
 | 
					# HTTP Basic Auth
 | 
				
			||||||
 | 
					#####################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.false 'enable_basic_auth'; then
 | 
				
			||||||
 | 
					  bashio::log.warning "HTTP Basic Auth is disabled!"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.true 'enable_basic_auth'; then
 | 
				
			||||||
 | 
					  bashio::log.info "HTTP Basic Auth is enabled!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Require variables
 | 
				
			||||||
 | 
					  bashio::config.require 'basic_auth_user' "You enabled HTTP Basic Auth, so you must set a username"
 | 
				
			||||||
 | 
					  bashio::config.require 'basic_auth_pass' "You enabled HTTP Basic Auth, so you must set a password"
 | 
				
			||||||
 | 
					  basic_auth_user="$(bashio::config 'basic_auth_user')"
 | 
				
			||||||
 | 
					  basic_auth_pass="$(bashio::config 'basic_auth_pass')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # bcrypt the password
 | 
				
			||||||
 | 
					  hashed_password=$(htpasswd -bnBC 12 "" "$basic_auth_pass" | tr -d ':\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Start echoing lines out to web config file (YAML is space-sensitive so I'm lazily not using a heredoc)
 | 
				
			||||||
 | 
					  echo "basic_auth_users:" >> $web_config_file
 | 
				
			||||||
 | 
					  echo "    $basic_auth_user: $hashed_password" >> $web_config_file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#####################
 | 
				
			||||||
 | 
					# TLS
 | 
				
			||||||
 | 
					#####################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.false 'enable_tls'; then
 | 
				
			||||||
 | 
					  bashio::log.warning "TLS is disabled!"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if bashio::config.true 'enable_tls'; then
 | 
				
			||||||
 | 
					  bashio::log.info "TLS is enabled!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Require variables
 | 
				
			||||||
 | 
					  bashio::config.require 'cert_file' "You enabled TLS, so you must set certificate file"
 | 
				
			||||||
 | 
					  bashio::config.require 'cert_key' "You enabled TLS, so you must set certificate key"
 | 
				
			||||||
 | 
					  cert_file="$(bashio::config 'cert_file')"
 | 
				
			||||||
 | 
					  cert_key="$(bashio::config 'cert_key')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Start echoing lines out to web config file (YAML is space-sensitive so I'm lazily not using a heredoc)
 | 
				
			||||||
 | 
					  echo "tls_server_config:" >> $web_config_file
 | 
				
			||||||
 | 
					  echo "    cert_file: $cert_file" >> $web_config_file
 | 
				
			||||||
 | 
					  echo "    key_file: $cert_key" >> $web_config_file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bashio
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Community Add-on: Prometheus Node Exporter
 | 
				
			||||||
 | 
					# Runs the Prometheus Node Exporter
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					bashio::log.info "Starting Prometheus Node Exporter..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run Prometheus
 | 
				
			||||||
 | 
					exec /usr/local/bin/node_exporter --web.config.file=/config/prometheus_node_exporter/node_exporter_web.yml $(bashio::config 'cmdline_extra_args' '')
 | 
				
			||||||
							
								
								
									
										16
									
								
								prometheus_node_exporter/rootfs/run.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bashio
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					# Home Assistant Community Add-on: Prometheus Node Exporter
 | 
				
			||||||
 | 
					# Runs the Prometheus Node Exporter
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# WHAT IS THIS FILE?!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The Prometheus Node Exporter add-on runs in the host PID namespace, therefore it cannot
 | 
				
			||||||
 | 
					# use the regular S6-Overlay; hence this add-on uses a "old school" script
 | 
				
			||||||
 | 
					# to run; with a couple of "hacks" to make it work.
 | 
				
			||||||
 | 
					# ==============================================================================
 | 
				
			||||||
 | 
					/etc/cont-init.d/node_exporter.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Start Prometheus Node Exporter
 | 
				
			||||||
 | 
					exec /etc/services.d/node_exporter/run
 | 
				
			||||||
							
								
								
									
										23
									
								
								prometheus_node_exporter/translations/en.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					configuration:
 | 
				
			||||||
 | 
					  enable_basic_auth:
 | 
				
			||||||
 | 
					    name: Enable HTTP basic auth
 | 
				
			||||||
 | 
					    description: Toggle on to enable HTTP basic authentication (i.e., password protection)
 | 
				
			||||||
 | 
					  basic_auth_user:
 | 
				
			||||||
 | 
					    name: Basic auth username
 | 
				
			||||||
 | 
					    description: The basic auth username
 | 
				
			||||||
 | 
					  basic_auth_pass:
 | 
				
			||||||
 | 
					    name: Basic auth password
 | 
				
			||||||
 | 
					    description: The basic auth password
 | 
				
			||||||
 | 
					  enable_tls:
 | 
				
			||||||
 | 
					    name: Enable TLS
 | 
				
			||||||
 | 
					    description: Toggle on to enable TLS (you will need to provide a path to certificates)
 | 
				
			||||||
 | 
					  cert_file:
 | 
				
			||||||
 | 
					    name: Public key
 | 
				
			||||||
 | 
					    description: This is a /path/to/fullchain.pem
 | 
				
			||||||
 | 
					  cert_key:
 | 
				
			||||||
 | 
					    name: Private key
 | 
				
			||||||
 | 
					    description: This is a /path/to/privkey.pem
 | 
				
			||||||
 | 
					  cmdline_extra_args:
 | 
				
			||||||
 | 
					    name: Command line extra arguments
 | 
				
			||||||
 | 
					    description: Extra arguments to pass to the "node_exporter" command at startup (see https://github.com/prometheus/node_exporter/#installation-and-usage for more information)
 | 
				
			||||||