mtr_monitor 0.13.2 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +115 -3
- data/lib/mtr_monitor.rb +17 -6
- data/lib/mtr_monitor/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 011e48e8082ba84320bb8cd5fd46accdd903b0a4
|
4
|
+
data.tar.gz: 258ff5f5ca66c2394d968430f9b0538541b3521f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5321c6d62702880ba38db94ee1cac1df6394417807062334cbc7d14fe157ebaf4a3260993c2f720b12df9b5c488b64763b12c009e27383e1340ddd176500b172
|
7
|
+
data.tar.gz: a6dc9538ddf761c7ea47427aca2034227ef7d883984113571a6e018c7dd7b06548d3d9f572c983fdb39af3c7d2472f5bea3890a5a0cc645d8f19b9c48e817946
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -36,6 +36,63 @@ Dashboards for the MTR monitor can be found on the
|
|
36
36
|
[Platform — Network](https://semaphore.grafana.net/dashboard/db/platform-network?refresh=10s&orgId=1)
|
37
37
|
dashboard on Grafana.
|
38
38
|
|
39
|
+
The US based MTR monitors have the following DNS addresses:
|
40
|
+
|
41
|
+
- `mtr-monitor.us-east-1.semaphoreci.com`
|
42
|
+
- `mtr-monitor.us-west-1.semaphoreci.com`
|
43
|
+
- `mtr-monitor.us-west-2.semaphoreci.com`
|
44
|
+
|
45
|
+
To SSH into the, run `ssh ubuntu@<address>`
|
46
|
+
|
47
|
+
## Location of the generated MTR reports
|
48
|
+
|
49
|
+
The MTR monitor generate and stores MTR reports both on the local machine, and
|
50
|
+
uploads them to S3.
|
51
|
+
|
52
|
+
Local reports on the machine are located in the `/var/log/mtr` directory, and
|
53
|
+
the following structure:
|
54
|
+
|
55
|
+
``` txt
|
56
|
+
/var/log/mtr/<name>-<YYYY-DD-MM>-<host-ip-address>-<HH-MM>.log
|
57
|
+
```
|
58
|
+
|
59
|
+
For example, if you call your report `hetzner-to-us-east-1` and run it at
|
60
|
+
`2017-12-18 12:33:06`, the log will be generated in:
|
61
|
+
|
62
|
+
``` txt
|
63
|
+
/var/log/mtr/hetzner-to-us-east-1-2017-12-18-142-21-43-11-12-33.log
|
64
|
+
```
|
65
|
+
|
66
|
+
On S3, the path will follow the same convention, but will use a nested directory
|
67
|
+
structure:
|
68
|
+
|
69
|
+
``` txt
|
70
|
+
s3://<bucket-name>/<name>/<YYYY-DD-MM>/<host-ip-address>/<HH-MM>.log
|
71
|
+
```
|
72
|
+
|
73
|
+
``` txt
|
74
|
+
s3://<bucket-name>/hetzner-to-us-east-1/2017-12-18/142-21-43-11/12-33.log
|
75
|
+
```
|
76
|
+
|
77
|
+
## Report Name
|
78
|
+
|
79
|
+
The name of the report is used to group reports with the same purpose on S3 and
|
80
|
+
on the local file system.
|
81
|
+
|
82
|
+
We use the following naming convention:
|
83
|
+
|
84
|
+
``` txt
|
85
|
+
<from>-to-<destination>
|
86
|
+
```
|
87
|
+
|
88
|
+
Examples:
|
89
|
+
|
90
|
+
``` txt
|
91
|
+
hetzner-to-github
|
92
|
+
us-east-1-to-hetzner-sb1
|
93
|
+
hetzner-to-us-west-2
|
94
|
+
```
|
95
|
+
|
39
96
|
## Using MTR Monitor as a gem
|
40
97
|
|
41
98
|
The MTR monitor can be used as a gem and injected into existing Ruby
|
@@ -85,12 +142,67 @@ information read the code in `lib/mtr_monitor/metrics.rb`.
|
|
85
142
|
|
86
143
|
## Using MTR Monitor as a standalone Docker container
|
87
144
|
|
145
|
+
The MTR monitor can be used as a standalone Docker container. This is our
|
146
|
+
current approach for monitors that are hitting Germany from the United States.
|
147
|
+
|
148
|
+
To run a standalone MTR monitor, run the following command:
|
149
|
+
|
88
150
|
``` bash
|
89
|
-
docker run -d -v /var/log/mtr:/var/log/mtr -e NAME=<> -e DOMAIN=<> -e MTR_OPTIONS=<> -e S3_BUCKET=<> -e AWS_ACCESS_KEY_ID=<> -e AWS_SECRET_ACCESS_KEY=<> -e SLEEP_TIME=<> renderedtext/mtr_monitor
|
151
|
+
docker run --name mtr-monitor -d -v /var/log/mtr:/var/log/mtr -e NAME=<> -e DOMAIN=<> -e MTR_OPTIONS=<> -e S3_BUCKET=<> -e AWS_ACCESS_KEY_ID=<> -e AWS_SECRET_ACCESS_KEY=<> -e SLEEP_TIME=<> renderedtext/mtr_monitor
|
90
152
|
```
|
91
153
|
|
92
|
-
|
154
|
+
By default, the containers running on us-east-1, us-west-1, and us-west-2 are
|
155
|
+
automatically deployed on every merge into master in for this repository.
|
156
|
+
|
157
|
+
The new container on the machine will trigger a MTR report generation every 5
|
158
|
+
minutes. Every time a Report is generated the following is executed:
|
159
|
+
|
160
|
+
- a new MTR report is generate on your local system under the `/var/log/mtr` directory
|
161
|
+
- the report is uploaded to the provided S3 bucket
|
162
|
+
- metrics are submitted via Watchman and a pulse is generated
|
163
|
+
- the MTR cleaner is uninitiated that cleans all reports from the local system
|
164
|
+
that are older then 2 weeks
|
165
|
+
|
166
|
+
To monitor if the CRON task is running as expected, you should
|
167
|
+
set up an alert on Grafana based on the "pulse" metric.
|
168
|
+
|
169
|
+
The pulse metric has the format `network.mtr.pulse` and is tagged with the
|
170
|
+
hostname of the server where the MTR monitor is running and with the name of the
|
171
|
+
metric.
|
172
|
+
|
173
|
+
MTR hops are also submitted to Grafana. Based on these metrics you can observe
|
174
|
+
the packet loss, avg, best, and worst latency on the network. For more
|
175
|
+
information read the code in `lib/mtr_monitor/metrics.rb`.
|
176
|
+
|
177
|
+
#### Setting up a new EC2 machine for a MTR monitor
|
178
|
+
|
179
|
+
1. Buy a new EC2 machine on AWS. Choose, a `t2-nano` instance type with Ubuntu
|
180
|
+
14.04 operating system.
|
181
|
+
|
182
|
+
2. SSH into the machine with the newly generated SSH keypair.
|
183
|
+
|
184
|
+
3. Add RT developers to the authorized keys file. For a list of public keys,
|
185
|
+
refer to `s3://renderedtext-secrets/stg1-semaphore/authorized-keys`.
|
186
|
+
|
187
|
+
4. Install docker. Run `curl https://get.docker.com | curl`.
|
188
|
+
|
189
|
+
5. Add the `ubuntu` user to docker group. `sudo usermod -aG docker ubuntu`
|
190
|
+
|
191
|
+
6. Re-login into the SSH session.
|
192
|
+
|
193
|
+
7. Pull and Run the MTR monitor:
|
194
|
+
|
195
|
+
``` bash
|
196
|
+
docker run --name mtr-monitor -d -v /var/log/mtr:/var/log/mtr -e NAME=<> -e DOMAIN=<> -e MTR_OPTIONS=<> -e S3_BUCKET=<> -e AWS_ACCESS_KEY_ID=<> -e AWS_SECRET_ACCESS_KEY=<> -e SLEEP_TIME=<> renderedtext/mtr_monitor
|
197
|
+
```
|
198
|
+
|
199
|
+
If you want to keep this machine permanently, add it to the list of continuously
|
200
|
+
deployed servers.
|
201
|
+
|
202
|
+
#### Continuously deploying MTR monitor to a EC2 machine
|
93
203
|
|
204
|
+
TODO @bmarkons
|
94
205
|
|
95
|
-
|
206
|
+
#### Set up Alerts and Monitoring for a MTR monitor
|
96
207
|
|
208
|
+
TODO @bmarkons
|
data/lib/mtr_monitor.rb
CHANGED
@@ -7,9 +7,19 @@ require "mtr_monitor/metrics"
|
|
7
7
|
require "mtr_monitor/cleaner"
|
8
8
|
|
9
9
|
module MtrMonitor
|
10
|
+
|
11
|
+
#
|
12
|
+
# MtrMonitor generates a MTR report for a domain and saves the report to:
|
13
|
+
# /var/log/mtr/<name>-<YYYY-DD-MM>-<host-ip-address>-<HH-MM>.log
|
14
|
+
#
|
15
|
+
# After that, it uploads the report to S3:
|
16
|
+
# s3://<bucket-name>/<name>/<YYYY-DD-MM>/<host-ip-address>/<HH-MM>.log
|
10
17
|
#
|
11
|
-
#
|
12
|
-
#
|
18
|
+
# Parameters:
|
19
|
+
#
|
20
|
+
# Name: The name of this report. Example: "hetzner-to-us-east-1"
|
21
|
+
# Domain: The domain to hit with MTR. Example: "github.com"
|
22
|
+
# MTR Options: Options to pass to the mtr command line tool.
|
13
23
|
#
|
14
24
|
|
15
25
|
REPORTS_PATH = "/var/log/mtr"
|
@@ -27,14 +37,15 @@ module MtrMonitor
|
|
27
37
|
@aws_access_key_id = aws_access_key_id
|
28
38
|
@aws_secret_access_key = aws_secret_access_key
|
29
39
|
@mtr_options = mtr_options
|
30
|
-
@host_ip_address = `
|
40
|
+
@host_ip_address = `dig +short myip.opendns.com @resolver1.opendns.com`.strip.gsub(".", "-")
|
31
41
|
@hostname = `hostname`.strip.gsub(".", "-")
|
32
42
|
@dig_ip_address = dig_ip_address
|
33
43
|
@logger = logger || Logger.new(STDOUT)
|
34
44
|
|
35
|
-
|
36
|
-
|
37
|
-
@
|
45
|
+
path = "#{@name}/#{Time.now.strftime("%Y-%m-%d")}/#{@host_ip_address}/#{Time.now.strftime("%H-%M")}.log"
|
46
|
+
|
47
|
+
@log_path = "#{MtrMonitor::REPORTS_PATH}/#{path.gsub("/", "-")}"
|
48
|
+
@s3_path = "s3://#{@s3_bucket}/#{path}"
|
38
49
|
end
|
39
50
|
|
40
51
|
def generate
|
data/lib/mtr_monitor/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtr_monitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RenderedText DevOps Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rt-watchman
|