This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
hashicorp_consul [2026/11/01 12:11] val |
hashicorp_consul [2026/11/01 15:14] (current) val |
||
|---|---|---|---|
| Line 6: | Line 6: | ||
| </code> | </code> | ||
| ==== Добавление и мониторинг web сервисов ==== | ==== Добавление и мониторинг web сервисов ==== | ||
| - | * [[Язык программирования Python#Доступ к каталогу по http]] | + | * [[Язык программирования Python#Доступ к каталогу по http]] на gate |
| <code> | <code> | ||
| - | server$ curl --request PUT \ | + | $ curl --request PUT \ |
| - | --url http://localhost:8500/v1/agent/service/register \ | + | --url http://server:8500/v1/agent/service/register \ |
| --header 'Content-Type: application/json' \ | --header 'Content-Type: application/json' \ | ||
| --data '{ | --data '{ | ||
| "ID": "web-app-N", | "ID": "web-app-N", | ||
| "Name": "web-service", | "Name": "web-service", | ||
| - | "Address": "192.168.X.10", | + | "Address": "192.168.X.1", |
| "Port": 8N, | "Port": 8N, | ||
| "Check": { | "Check": { | ||
| "Name": "Web App HTTP Check", | "Name": "Web App HTTP Check", | ||
| - | "HTTP": "http://192.168.X.10:8N/", | + | "HTTP": "http://192.168.X.1:8N/", |
| "Interval": "10s", | "Interval": "10s", | ||
| "Timeout": "1s" | "Timeout": "1s" | ||
| Line 25: | Line 25: | ||
| ... | ... | ||
| - | server$ curl -s "http://localhost:8500/v1/health/service/web-service" | + | $ curl -s "http://server:8500/v1/health/service/web-service" | ... |
| + | или | ||
| + | $ curl -s "http://server:8500/v1/health/service/web-service?passing=1" | ... | ||
| - | server$ curl -s "http://localhost:8500/v1/health/service/web-service?passing=1" | + | ... jq '.[] | .Node.Node as $node | .Service.ID as $sid | .Checks[] | {Node: $node, ServiceID: $sid, CheckName: .Name, Status: .Status}' |
| </code> | </code> | ||
| * [[Сервис Prometheus]] | * [[Сервис Prometheus]] | ||
| Line 34: | Line 36: | ||
| jq '[{ "targets": [ .[] | "\(.Service.Address):\(.Service.Port)" ], "labels": { "job": "web-service" } }]' \ | jq '[{ "targets": [ .[] | "\(.Service.Address):\(.Service.Port)" ], "labels": { "job": "web-service" } }]' \ | ||
| | tee /etc/prometheus/targets.json | | tee /etc/prometheus/targets.json | ||
| + | </code> | ||
| - | server$ curl --request PUT http://localhost:8500/v1/agent/service/deregister/web-app-N | + | ==== Удаление сервиса ==== |
| - | ... | + | <code> |
| + | server$ ID=web-app-N | ||
| + | |||
| + | server$ curl --request PUT http://localhost:8500/v1/agent/service/deregister/$ID | ||
| </code> | </code> | ||
| ==== Пример с node-exporter ==== | ==== Пример с node-exporter ==== | ||
| Line 52: | Line 58: | ||
| http://server:8500/v1/agent/service/register | http://server:8500/v1/agent/service/register | ||
| | | ||
| - | clientN:~# cat register.sh | + | clientN:~# crontab -l |
| + | </code><code> | ||
| + | @reboot sleep 10; /usr/local/bin/register-in-consul.sh | ||
| + | </code><code> | ||
| #!/bin/bash | #!/bin/bash | ||
| Line 73: | Line 82: | ||
| }" \ | }" \ | ||
| http://server:8500/v1/agent/service/register | http://server:8500/v1/agent/service/register | ||
| + | </code> | ||
| + | |||
| + | ==== Пример с windows-exporter ==== | ||
| + | |||
| + | <code> | ||
| + | PS> mkdir C:\Scripts | ||
| + | |||
| + | PS> notepad C:\Scripts\register-in-consul.ps1 | ||
| + | </code><code> | ||
| + | $Hostname = [System.Net.Dns]::GetHostName() | ||
| + | $ServiceId = "windows-exporter-$Hostname" | ||
| + | |||
| + | $IpAddress = (Get-NetIPAddress -AddressFamily IPv4 | | ||
| + | Where-Object { $_.InterfaceAlias -notlike "*Loopback*" -and $_.IPAddress -notlike "169.254.*" } | | ||
| + | Select-Object -First 1).IPAddress | ||
| + | |||
| + | $Body = @{ | ||
| + | ID = $ServiceId | ||
| + | Name = "windows-exporter" | ||
| + | Address = $IpAddress | ||
| + | Port = 9182 | ||
| + | Meta = @{ | ||
| + | hostname = $Hostname | ||
| + | } | ||
| + | } | ConvertTo-Json -Compress | ||
| + | |||
| + | $Uri = "http://server:8500/v1/agent/service/register" | ||
| + | Invoke-RestMethod -Method Put -Uri $Uri -ContentType "application/json" -Body $Body | ||
| + | </code><code> | ||
| + | PS> PowerShell.exe -ExecutionPolicy Bypass -File C:\Scripts\register-in-consul.ps1 | ||
| + | |||
| + | PS Admin> | ||
| + | $Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Scripts\register-in-consul.ps1" | ||
| + | $Trigger = New-ScheduledTaskTrigger -AtStartup | ||
| + | $Trigger.Delay = "PT10S" | ||
| + | Register-ScheduledTask -TaskName "RegisterInConsul" -Action $Action -Trigger $Trigger -User "NT AUTHORITY\SYSTEM" -Force | ||
| + | |||
| + | PS Admin> Get-ScheduledTask -TaskName "RegisterInConsul" | ||
| </code> | </code> | ||