mtr_monitor 0.13.2 → 0.13.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|