Админим с Буквой
5.51K subscribers
302 photos
8 videos
59 files
1.16K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
Как скрестить ежа с ужом и не потратить на это неоправдано много времени

Документация, мать ее, это всегда больная тема. Я потратил несколько дней на то чтобы найти правильный способ создания политики в консуле, чтобы туда мог ходить vault. то что указано в learning и документации - не правильно. А вот как надо:

cat >vault.hcl <<EOF
key_prefix "vault/" {
policy = "write"
}
node_prefix "" {
policy = "write"
}
service "vault" {
policy = "write"
}
agent_prefix "" {
policy = "write"
}
session_prefix "" {
policy = "write"
}
EOF

consul acl policy create -name "vault" -description "vault" -rules @vault.hcl -datacenter "dc1" -token "XXX"
consul acl token create -policy-id=<get_from_previous_step> -token "XXX"


#consul #vault
Получаем список сервисов из consul с фильтрованием по тегу

curl  "http://consul:8500/v1/agent/services?filter=docker+in+Tags"


или

curl -G "http://consul:8500/v1/agent/services" --data-urlencode 'filter=prometheus in Tags'


#consul
Конфиг prometheus сервера с хостами из consul шаблонизированный в jinja

global:
scrape_interval: 10s
scrape_timeout: 10s
remote_write:
- queue_config:
max_samples_per_send: 10000
max_shards: 30
url: {{ remote_write_url }}

rule_files:
{% for rulefile in (lookup('fileglob', '*.rules')).split(',') %}
- /etc/prometheus/{{ rulefile | basename }}
{% endfor %}

alerting:
alertmanagers:
- static_configs:
- targets:
{% for host in groups[alertmanager_group] %}
- {{ hostvars[host]['ansible_default_ipv4']['address'] }}:9093
{% endfor %}

{% set service_list=[] %}
{%- for k,v in consul_services.json.items() %}
{{ service_list.append(v.Service) }}
{%- endfor %}
scrape_configs:
{% for service in service_list | unique %}
- job_name: {{ service }}
consul_sd_configs:
{% for tag in ['env1','env2','env3'] %}
- server: {{ consul_url | replace("http://", "") }}
tags: [ {{ tag }} ]
services: [ {{ service }} ]
{% endfor %}
{% endfor %}


consul_services - переменная получаемая таском:

- name: Fetch consul services
uri:
url: "{{ consul_url }}/v1/agent/services?filter=prometheus+in+Tags"
body: json
register: consul_services
changed_when: false
check_mode: no


#consul #ansible #prometheus #jinja