add promtail role
This commit is contained in:
16
roles/promtail/.ansible-lint
Normal file
16
roles/promtail/.ansible-lint
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
profile: production
|
||||||
|
strict: true
|
||||||
|
|
||||||
|
# Enable checking of loop variable prefixes in roles
|
||||||
|
loop_var_prefix: "^(__|{role}_)"
|
||||||
|
|
||||||
|
skip_list:
|
||||||
|
- var-naming[no-role-prefix]
|
||||||
|
|
||||||
|
warn_list:
|
||||||
|
- role-name[path]
|
||||||
|
- var-naming[no-role-prefix]
|
||||||
|
|
||||||
|
exclude_paths:
|
||||||
|
- .github/
|
||||||
2
roles/promtail/.gitignore
vendored
Normal file
2
roles/promtail/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.vscode
|
||||||
|
.idea
|
||||||
8
roles/promtail/.yamllint
Normal file
8
roles/promtail/.yamllint
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
rules:
|
||||||
|
brackets:
|
||||||
|
forbid: false
|
||||||
|
min-spaces-inside: 0
|
||||||
|
max-spaces-inside: 2
|
||||||
|
min-spaces-inside-empty: -1
|
||||||
|
max-spaces-inside-empty: 2
|
||||||
44
roles/promtail/README.md
Normal file
44
roles/promtail/README.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
promtail
|
||||||
|
=========
|
||||||
|
|
||||||
|
Installs promtail as systemd service.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
(all optional)
|
||||||
|
`promtail_version`: version to install
|
||||||
|
`loki_server`: set loki server
|
||||||
|
`loki_port`: set loki port
|
||||||
|
`custom_server_config`: path to custom config witch replace all config with your own
|
||||||
|
`custom_scrape_configs`: path to custom scrape configs
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
No
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- hosts: servers
|
||||||
|
roles:
|
||||||
|
- role: promtail
|
||||||
|
promtail_version: 2.7.3
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Alexander Gorelyshev and Danilkin Danila (MIPT)
|
||||||
|
|
||||||
|
Genlab LLC
|
||||||
|
|
||||||
|
corvus-migratorius@proton.me
|
||||||
7
roles/promtail/defaults/main.yml
Normal file
7
roles/promtail/defaults/main.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
promtail_version: 2.7.3
|
||||||
|
promtail_positions_path: /home/promtail/positions.yaml
|
||||||
|
promtail_http_port: 9080
|
||||||
|
loki_server: localhost
|
||||||
|
loki_port: 3100
|
||||||
|
add_var_logs: true
|
||||||
11
roles/promtail/handlers/main.yml
Normal file
11
roles/promtail/handlers/main.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: "Restart the Promtail daemon"
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: promtail
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Reload the Promtail daemon configuration"
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
daemon_reload: true
|
||||||
14
roles/promtail/meta/main.yml
Normal file
14
roles/promtail/meta/main.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
galaxy_info:
|
||||||
|
role_name: promtail
|
||||||
|
namespace: genlab
|
||||||
|
author: Danilkin Danila
|
||||||
|
description: Installs Promtail
|
||||||
|
|
||||||
|
company: Genlab LLC
|
||||||
|
license: MIT
|
||||||
|
|
||||||
|
min_ansible_version: "2.1"
|
||||||
|
|
||||||
|
galaxy_tags: []
|
||||||
|
|
||||||
|
dependencies: []
|
||||||
5
roles/promtail/molecule/default/converge.yml
Normal file
5
roles/promtail/molecule/default/converge.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
roles:
|
||||||
|
- role: genlab.common.promtail
|
||||||
24
roles/promtail/molecule/default/molecule.yml
Normal file
24
roles/promtail/molecule/default/molecule.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
driver:
|
||||||
|
name: docker
|
||||||
|
platforms:
|
||||||
|
- name: ubuntu
|
||||||
|
image: geerlingguy/docker-ubuntu2204-ansible:latest
|
||||||
|
pre_build_image: true
|
||||||
|
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||||
|
volumes:
|
||||||
|
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||||
|
cgroupns_mode: host
|
||||||
|
privileged: true
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
playbooks:
|
||||||
|
converge: converge.yml
|
||||||
|
verifier:
|
||||||
|
name: ansible
|
||||||
|
lint: |
|
||||||
|
set -e
|
||||||
|
yamllint .
|
||||||
|
ansible-lint .
|
||||||
19
roles/promtail/molecule/default/verify.yml
Normal file
19
roles/promtail/molecule/default/verify.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Verify
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
# https://github.com/ansible/molecule/issues/3587#issuecomment-1158650179
|
||||||
|
- name: "Include default vars"
|
||||||
|
ansible.builtin.include_vars:
|
||||||
|
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/"
|
||||||
|
extensions: [ 'yml' ]
|
||||||
|
|
||||||
|
- name: "Sanity check the Promtail daemon"
|
||||||
|
retries: 3
|
||||||
|
delay: 1
|
||||||
|
register: this
|
||||||
|
failed_when: "this.content != 'Ready'"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://localhost:{{ promtail_http_port }}/ready"
|
||||||
|
return_content: true
|
||||||
6
roles/promtail/renovate.json
Normal file
6
roles/promtail/renovate.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"config:recommended"
|
||||||
|
]
|
||||||
|
}
|
||||||
5
roles/promtail/requirements.ci.txt
Normal file
5
roles/promtail/requirements.ci.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
ansible
|
||||||
|
molecule
|
||||||
|
molecule-plugins[docker]
|
||||||
|
docker
|
||||||
|
requests==2.31.0 # pinned to the latest version not breaking Docker SDK
|
||||||
107
roles/promtail/tasks/main.yml
Normal file
107
roles/promtail/tasks/main.yml
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
---
|
||||||
|
- name: "Install packages"
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: [ acl, unzip ]
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
cache_valid_time: 3600
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Create the 'promtail' group"
|
||||||
|
ansible.builtin.group:
|
||||||
|
name: promtail
|
||||||
|
state: present
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Create the 'promtail' user"
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: promtail
|
||||||
|
groups:
|
||||||
|
- promtail
|
||||||
|
- systemd-journal
|
||||||
|
- adm
|
||||||
|
state: present
|
||||||
|
system: true
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Set facl to allow promtail user to read '/var/log' contents"
|
||||||
|
ansible.posix.acl:
|
||||||
|
path: /var/log
|
||||||
|
entity: promtail
|
||||||
|
etype: user
|
||||||
|
permissions: rX
|
||||||
|
state: present
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Make promtail user owner of '{{ promtail_positions_path }}'"
|
||||||
|
changed_when: false
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ promtail_positions_path }}"
|
||||||
|
owner: promtail
|
||||||
|
group: promtail
|
||||||
|
state: touch
|
||||||
|
mode: "0750"
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Install the requested Promtail version"
|
||||||
|
block:
|
||||||
|
- name: "Check Promtail version"
|
||||||
|
ansible.builtin.command: /usr/bin/promtail --version
|
||||||
|
register: promtail_version_check
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: "Assert version correctness"
|
||||||
|
notify: "Restart the Promtail daemon"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that: "promtail_version in promtail_version_check.stdout"
|
||||||
|
success_msg: "Expected Promtail version available ({{ promtail_version }})"
|
||||||
|
fail_msg: "Expected version '{{ promtail_version }}'; available is '{{ promtail_version_check.stdout }}'"
|
||||||
|
|
||||||
|
rescue:
|
||||||
|
- name: "Install Promtail if its not present"
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "https://github.com/grafana/loki/releases/download/v\
|
||||||
|
{{ promtail_version }}/promtail-linux-amd64.zip"
|
||||||
|
dest: /usr/bin/
|
||||||
|
remote_src: true
|
||||||
|
|
||||||
|
- name: "Rename and set permissions for the Promtail binary"
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "/usr/bin/promtail-linux-amd64"
|
||||||
|
dest: "/usr/bin/promtail"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
remote_src: true
|
||||||
|
|
||||||
|
- name: "Cleanup the downloaded file"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/usr/bin/promtail-linux-amd64"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Template the systemd unit file"
|
||||||
|
notify: "Reload the Promtail daemon configuration"
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: promtail.service.j2
|
||||||
|
dest: /etc/systemd/system/promtail.service
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Template Promtail config file"
|
||||||
|
notify: "Restart the Promtail daemon"
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: templates/promtail.yml.j2
|
||||||
|
dest: /usr/local/bin/config-promtail.yml
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Enable and start Promtail daemon"
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: promtail
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
11
roles/promtail/templates/promtail.service.j2
Normal file
11
roles/promtail/templates/promtail.service.j2
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Promtail service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=promtail
|
||||||
|
ExecStart=/usr/bin/promtail -config.file /usr/local/bin/config-promtail.yml
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
28
roles/promtail/templates/promtail.yml.j2
Normal file
28
roles/promtail/templates/promtail.yml.j2
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% if custom_server_config is defined %}
|
||||||
|
{{ custom_server_config }}
|
||||||
|
{% else %}
|
||||||
|
server:
|
||||||
|
http_listen_port: {{ promtail_http_port }}
|
||||||
|
grpc_listen_port: 0
|
||||||
|
{% endif %}
|
||||||
|
positions:
|
||||||
|
filename: {{ promtail_positions_path }}
|
||||||
|
|
||||||
|
clients:
|
||||||
|
- url: "http://{{ loki_server }}:{{ loki_port }}/loki/api/v1/push"
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
{% if add_var_logs %}
|
||||||
|
- job_name: system
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- localhost
|
||||||
|
labels:
|
||||||
|
job: varlogs
|
||||||
|
__path__: /var/log/*log
|
||||||
|
host: {{ ansible_hostname }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if custom_scrape_configs is defined %}
|
||||||
|
{{ custom_scrape_configs }}
|
||||||
|
{% endif %}
|
||||||
1
roles/promtail/vars/main.yml
Normal file
1
roles/promtail/vars/main.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
---
|
||||||
Reference in New Issue
Block a user