рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдХреБрдЫ рд░реВрдЯреАрди рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рджрд░реНрд╢рд╛рддреА рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ Azure Cli рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдХреНрд▓рд╛рдЙрдб-рдЗрдирд┐рдЯ.рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдбреЙрдХрд░ рдФрд░ рдбреЙрдХрд░-рдХрдореНрдкреЛрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдХреНрд▓рд╛рдЙрдб-init.txt #cloud-config package_upgrade: true write_files: - path: /etc/systemd/system/docker.service.d/docker.conf content: | [Service] ExecStart= ExecStart=/usr/bin/dockerd - path: /etc/docker/daemon.json content: | { "hosts": ["fd://","tcp://127.0.0.1:2375"] } runcmd: - apt-get update && apt-get install mc -y - curl -sSL https://get.docker.com/ | sh - curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose
рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ docker-compose.yaml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ
рдбреЛрдХрд░-compose.yaml version: '3.2' services: alertmanager-bot: image: metalmatze/alertmanager-bot:0.3.1 environment: - ALERTMANAGER_URL=http://<alertmngerURL>:9093 # - LISTEN_ADDR=0.0.0.0:8080 - BOLT_PATH=/data/bot.db - STORE=bolt - TELEGRAM_ADMIN=<TelegramAdminID> # ID - TELEGRAM_TOKEN=<TelegramBotToken> # - TEMPLATE_PATHS=/templates/default.tmpl volumes: - /srv/monitoring/alertmanager-bot:/data ports: - 8080:8080 prometheus: image: prom/prometheus:latest volumes: - ./prometheus:/etc/prometheus/ command: - --config.file=/etc/prometheus/prometheus.yml ports: - 9090:9090 links: - cadvisor:cadvisor depends_on: - cadvisor restart: always node-exporter: image: prom/node-exporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs=/host/proc - --path.sysfs=/host/sys - --collector.filesystem.ignored-mount-points - ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/) ports: - 9100:9100 restart: always deploy: mode: global alertmanager: image: prom/alertmanager ports: - 9093:9093 volumes: - ./alertmanager/:/etc/alertmanager/ restart: always command: - --config.file=/etc/alertmanager/config.yml - --storage.path=/alertmanager cadvisor: image: google/cadvisor volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - 8081:8080 restart: always deploy: mode: global grafana: image: grafana/grafana depends_on: - prometheus ports: - 3000:3000 volumes: - ./grafana:/var/lib/grafana - ./grafana/provisioning/:/etc/grafana/provisioning/ restart: always
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрдо рдореЗрдВ рдЯреИрдм рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИрдВ, рдЗрд╕реЗ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВред рдЖрдЗрдП docker-compose.yaml рдлрд╛рдЗрд▓ рдХреЛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
рдЫрд╡рд┐: - рдпрд╣рд╛рдБ docker рдХрдВрдЯреЗрдирд░ рдЪрд┐рддреНрд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдЕрдм рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛, рдЗрдВрдЯрд░рдиреЗрдЯ рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕реГрдЬрди @BotFather bot рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ ред
рд╣рдореЗрдВ рдмреЙрдЯ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рдХреА рдЯреЛрдХрди рдФрд░ рдЖрдкрдХреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ.рдорд╛рдЗрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЪрд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ:
prometheus.yml рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЕрд▓рд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд░рддрд╛ рд╣реИред
prometheus.yml scrape_configs: - job_name: node scrape_interval: 5s static_configs: - targets: ['ip_node_explorer:9100'] rule_files: - './con.yml' alerting: alertmanagers: - static_configs: - targets: ['ip_alertmanager:9093']
рдЕрд▓рд░реНрдЯ рдХреЗ рд╡рд░реНрдгрди рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ con.yml ред рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдиреЛрдб рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ рдЬреАрд╡рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
con.yml groups: - name: ExporterDown rules: - alert: NodeDown expr: up{job='Node'} == 0 for: 1m labels: severity: Error annotations: summary: "Node Explorer instance ($instance) down" description: "NodeExporterDown"
config.yml рдХреЛ рд╕рддрд░реНрдХрддрд╛рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
config.yml route: group_wait: 20s # group_interval: 20s # repeat_interval: 60s # group_by: ['alertname', 'cluster', 'service'] receiver: alertmanager-bot receivers: - name: alertmanager-bot webhook_configs: - send_resolved: true url: 'http://ip_telegram_bot:8080'
рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдЪрд▓рд╛рдПрдБ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:
docker-compose up -d
docker-compose ps
рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рднреА рдЕрдк рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
docker logs < >
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
docker logs docker logs project_alertmanager_1
рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:

рдЕрдм рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП test.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ
test.sh #!/bin/sh curl \ --request POST \ --data '{"receiver":"telegram","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"Fire","severity":"critical"},"annotations":{"message":"Something is on fire"},"startsAt":"2018-11-04T22:43:58.283995108+01:00","endsAt":"2018-11-04T22:46:58.283995108+01:00","generatorURL":"http://localhost:9090/graph?g0.expr=vector%28666%29\u0026g0.tab=1"}],"groupLabels":{"alertname":"Fire"},"commonLabels":{"alertname":"Fire","severity":"critical"},"commonAnnotations":{"message":"Something is on fire"},"externalURL":"http://localhost:9093","version":"4","groupKey":"{}:{alertname=\"Fire\"}"}' \ localhost:8080
рдЬрд┐рд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рдмреЙрдЯ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо con.yml рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрдкрдиреЗ рдЕрд▓рд░реНрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдиреЛрдб рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ
docker stop < node exporter>
рджреЛ рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдмреЙрдЯ рдЖрдкрдХреЛ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬреЗрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдиреЛрдб рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ рд╢реБрд░реВ рдХрд░реЗрдВ
docker start < node exporter>
рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж, рдмреЙрдЯ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд╕рдм рд╣реИ, рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдореАрдЯреНрд░рд┐рдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдКрдВрдЧрд╛ред