├── diagrams ├── processing_metrics.png └── processing_metrics.graffle ├── .gitignore ├── LICENSE ├── contributing.md └── README.md /diagrams/processing_metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/numbat-metrics/documentation/HEAD/diagrams/processing_metrics.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directory 27 | node_modules 28 | 29 | # Optional npm cache directory 30 | .npm 31 | 32 | # Optional REPL history 33 | .node_repl_history 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, numbat-metrics 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to numbat 2 | 3 | We'd love to have you contribute to numbat! Metrics are awesome and so are striped marsupials. 4 | 5 | Please write unit tests for your contribution if you can, and make sure that any existing unit tests still pass. The command `npm run lint` will run a linter in all of the repos to help you catch errors as well. 6 | 7 | ## Contributor Code of Conduct 8 | 9 | As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. 10 | 11 | We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. 12 | 13 | Examples of unacceptable behavior by participants include: 14 | 15 | * The use of sexualized language or imagery 16 | * Personal attacks 17 | * Trolling or insulting/derogatory comments 18 | * Public or private harassment 19 | * Publishing other's private information, such as physical or electronic addresses, without explicit permission 20 | * Other unethical or unprofessional conduct 21 | * Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 22 | 23 | By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. 24 | 25 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. 26 | 27 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer at ceej@npmjs.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident. 28 | 29 | This Code of Conduct is adapted from the Contributor Covenant, version 1.3.0, available from http://contributor-covenant.org/version/1/3/0/ 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The numbat system 2 | 3 | Numbat-powered metrics are in production at npm, allowing us to gather a lot of metrics from node services and view them in pretty charts. 4 | 5 | The numbat modules: 6 | 7 | * [numbat-emitter](https://github.com/numbat-metrics/numbat-emitter): a module you're intended to require anywhere you need it. Make an emitter object, then emit metrics with it by calling `process.emit('metric', {name: 'foo'})`. 8 | * [numbat-collector](https://github.com/numbat-metrics/numbat-collector): receiver that runs on every host 9 | * [numbat-analyzer](https://github.com/numbat-metrics/numbat-analyzer): a server that accepts data streams from the collector & processes them 10 | * [numbat-influx](https://github.com/numbat-metrics/numbat-influx): an InfluxDB 0.9+ output sink for the collector 11 | * [numbat-redis](https://github.com/numbat-metrics/numbat-redis): emit some interesting redis stats 12 | * [numbat-haproxy](https://github.com/numbat-metrics/numbat-haproxy): watch what your haproxies are up to 13 | * [numbat-process](https://github.com/numbat-metrics/numbat-process): include in your node server to emit periodic stats about it 14 | 15 | Design: 16 | 17 | - There's a bunch of [InfluxDB](http://influxdb.com)s sharded by hand to balance out usage. (We haven't been happy with it clustered). 18 | - Each host with services to be monitored runs a [numbat-collector](https://github.com/numbat-metrics/numbat-collector) listening on a known tcp port. (You can also use udp or websockets.) 19 | - Each service makes a numbat-emitter client & then emits metrics at will. 20 | - The per-host collectors send all data to InfluxDB and to any other output you have defined. 21 | - They also send it to the [numbat-analyzer](https://github.com/numbat-metrics/numbat-analyzer). 22 | - `numbat-analyzer` analyzes stats & also feeds data to InfluxDB. 23 | - `numbat-analyzer` is also responsible for sending alerts to Pager Duty and to a Slack channel. 24 | - [grafana](http://grafana.org) dashboards show the data. 25 | - If this service does its job, you delete your nagios installation. (Except you don't ever, because you have redundant monitoring and monitoring for the monitoring.) 26 | 27 | An example setup might look like this, with many service/collector pairs: 28 | 29 | ![](diagrams/processing_metrics.png) 30 | 31 | This is what we run in production at npm, only we have over 100 instances running services & sending data in. 32 | 33 | ### Data flow 34 | 35 | Implications: 36 | 37 | - everything goes into InfluxDB: metrics, operational actions, other human actions 38 | - Dashboard needs to include both visual data (graphs) & current alert status 39 | - data should probably get tagged with "how to display this" so a new stream of info from numbat can be displayed usefully sans config 40 | - Dashboard should link to the matching Grafana historical data displays for each metric. 41 | 42 | ### What does a metric data point look like? 43 | 44 | It must be a valid InfluxDB data point. Inspired by Riemann's events. 45 | 46 | ```javascript 47 | { 48 | host: 'hostname.example.com', 49 | name: 'name.of.metric', 50 | status: 'okay' | 'warning' | 'critical' | 'unknown', 51 | description: 'textual description', 52 | time: ts-in-ms, 53 | ttl: ms-to-live, 54 | value: 42, 55 | field: 'abitrary data', 56 | field2: 'another tag' 57 | } 58 | ``` 59 | 60 | Use tags to carry metadata. Some possibilities: 61 | 62 | - `annotation`: a singular event, like a deploy. 63 | - `counter`, `gauge`, etc: hints about how to chart 64 | 65 | ## Contributing 66 | 67 | Yes, please. See [contributing.md](contributing.md) for information about how and our code of conduct. 68 | -------------------------------------------------------------------------------- /diagrams/processing_metrics.graffle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActiveLayerIndex 6 | 0 7 | ApplicationVersion 8 | 9 | com.omnigroup.OmniGraffle6 10 | 161.8.0.237618 11 | 12 | AutoAdjust 13 | 14 | BackgroundGraphic 15 | 16 | Bounds 17 | {{0, 0}, {576, 733}} 18 | Class 19 | SolidGraphic 20 | ID 21 | 2 22 | Style 23 | 24 | stroke 25 | 26 | Draws 27 | NO 28 | 29 | 30 | 31 | BaseZoom 32 | 0 33 | CanvasOrigin 34 | {0, 0} 35 | ColumnAlign 36 | 1 37 | ColumnSpacing 38 | 36 39 | CreationDate 40 | 2014-02-12 19:52:10 +0000 41 | Creator 42 | C J Silverio 43 | DisplayScale 44 | 1 in = 1 in 45 | GraphDocumentVersion 46 | 12 47 | GraphicsList 48 | 49 | 50 | Bounds 51 | {{189, 9}, {90, 54}} 52 | Class 53 | ShapedGraphic 54 | FontInfo 55 | 56 | Size 57 | 12 58 | 59 | ID 60 | 221 61 | Magnets 62 | 63 | {0, 1} 64 | {0, -1} 65 | {1, 0} 66 | {-1, 0} 67 | 68 | Shape 69 | Cylinder 70 | Text 71 | 72 | Text 73 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 74 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 75 | {\colortbl;\red255\green255\blue255;} 76 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 77 | 78 | \f0\fs24 \cf0 jut} 79 | VerticalPad 80 | 0 81 | 82 | 83 | 84 | Bounds 85 | {{189, 81}, {90, 54}} 86 | Class 87 | ShapedGraphic 88 | FontInfo 89 | 90 | Size 91 | 12 92 | 93 | ID 94 | 10 95 | Magnets 96 | 97 | {0, 1} 98 | {0, -1} 99 | {1, 0} 100 | {-1, 0} 101 | 102 | Shape 103 | Cylinder 104 | Text 105 | 106 | Text 107 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 108 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 109 | {\colortbl;\red255\green255\blue255;} 110 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 111 | 112 | \f0\fs24 \cf0 influxdb} 113 | VerticalPad 114 | 0 115 | 116 | 117 | 118 | Class 119 | LineGraphic 120 | FontInfo 121 | 122 | Font 123 | Helvetica 124 | Size 125 | 12 126 | 127 | Head 128 | 129 | ID 130 | 117 131 | Info 132 | 2 133 | 134 | ID 135 | 215 136 | Points 137 | 138 | {234, 243} 139 | {237.69400868619491, 279} 140 | {203.24382877120172, 306.64829941243011} 141 | 142 | Style 143 | 144 | shadow 145 | 146 | Draws 147 | NO 148 | 149 | stroke 150 | 151 | HeadArrow 152 | FilledArrow 153 | HopLines 154 | 155 | HopType 156 | 4 157 | Legacy 158 | 159 | LineType 160 | 1 161 | TailArrow 162 | 0 163 | 164 | 165 | Tail 166 | 167 | ID 168 | 207 169 | Info 170 | 8 171 | 172 | 173 | 174 | Bounds 175 | {{396, 9}, {90, 45}} 176 | Class 177 | ShapedGraphic 178 | ID 179 | 186 180 | Magnets 181 | 182 | {-1.1043381270690911, -0.74713792493709619} 183 | {-0.10659983601605962, -1.3290651800190716} 184 | {0.90918666004556881, -0.97527298484729963} 185 | {1.1341636784447084, 0.70103532598189777} 186 | {0.15381251217306488, 1.3244317607475247} 187 | {-0.91245090972807563, 0.97221968459509456} 188 | 189 | Shape 190 | Cloud 191 | Style 192 | 193 | shadow 194 | 195 | Draws 196 | NO 197 | 198 | 199 | Text 200 | 201 | Text 202 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 203 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 204 | {\colortbl;\red255\green255\blue255;} 205 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 206 | 207 | \f0\fs24 \cf0 human} 208 | VerticalPad 209 | 0 210 | 211 | 212 | 213 | Bounds 214 | {{153, 306}, {108, 45}} 215 | Class 216 | ShapedGraphic 217 | ID 218 | 117 219 | Magnets 220 | 221 | {-1.1043381270690908, -0.74713792493709652} 222 | {-0.10659983601605942, -1.3290651800190714} 223 | {0.90918666004556803, -0.97527298484730029} 224 | {1.1341636784447078, 0.70103532598189888} 225 | {0.15381251217306738, 1.3244317607475244} 226 | {-0.91245090972807752, 0.97221968459509256} 227 | 228 | Shape 229 | Cloud 230 | Style 231 | 232 | shadow 233 | 234 | Draws 235 | NO 236 | 237 | 238 | Text 239 | 240 | Text 241 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 242 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 243 | {\colortbl;\red255\green255\blue255;} 244 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 245 | 246 | \f0\fs24 \cf0 alerting\ 247 | services} 248 | VerticalPad 249 | 0 250 | 251 | 252 | 253 | Class 254 | Group 255 | Graphics 256 | 257 | 258 | Class 259 | Group 260 | Graphics 261 | 262 | 263 | Class 264 | LineGraphic 265 | FontInfo 266 | 267 | Font 268 | Helvetica 269 | Size 270 | 12 271 | 272 | Head 273 | 274 | ID 275 | 198 276 | 277 | ID 278 | 197 279 | Points 280 | 281 | {63, 62.999999999999943} 282 | {63, 89.999999999999943} 283 | 284 | Style 285 | 286 | shadow 287 | 288 | Draws 289 | NO 290 | 291 | stroke 292 | 293 | HeadArrow 294 | FilledArrow 295 | Legacy 296 | 297 | LineType 298 | 1 299 | TailArrow 300 | 0 301 | 302 | 303 | Tail 304 | 305 | ID 306 | 199 307 | 308 | 309 | 310 | Bounds 311 | {{18, 89.999999999999943}, {90, 27}} 312 | Class 313 | ShapedGraphic 314 | ID 315 | 198 316 | Magnets 317 | 318 | {-0.59628479399994394, -1.1925695879998879} 319 | {0, -1.3333333333333333} 320 | {0.59628479399994427, -1.1925695879998874} 321 | {1.1925695879998879, -0.59628479399994394} 322 | {1.3333333333333333, 0} 323 | {1.1925695879998879, 0.59628479399994394} 324 | {0.59628479399994394, 1.1925695879998879} 325 | {0, 1.3333333333333333} 326 | {-0.59628479399994394, 1.1925695879998879} 327 | {-1.1925695879998879, 0.59628479399994394} 328 | {-1.3333333333333333, 0} 329 | {-1.1925695879998879, -0.59628479399994394} 330 | 331 | Style 332 | 333 | fill 334 | 335 | Color 336 | 337 | b 338 | 0.666667 339 | g 340 | 0.74902 341 | r 342 | 0.458824 343 | 344 | 345 | shadow 346 | 347 | Draws 348 | NO 349 | 350 | stroke 351 | 352 | CornerRadius 353 | 9 354 | 355 | 356 | Text 357 | 358 | Text 359 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 360 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 361 | {\colortbl;\red255\green255\blue255;} 362 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 363 | 364 | \f0\fs24 \cf0 collector-1} 365 | 366 | 367 | 368 | Bounds 369 | {{18, 35.999999999999943}, {90, 27}} 370 | Class 371 | ShapedGraphic 372 | ID 373 | 199 374 | Magnets 375 | 376 | {-0.59628479399994394, -1.1925695879998879} 377 | {0, -1.3333333333333333} 378 | {0.59628479399994427, -1.1925695879998874} 379 | {1.1925695879998879, -0.59628479399994394} 380 | {1.3333333333333333, 0} 381 | {1.1925695879998879, 0.59628479399994394} 382 | {0.59628479399994394, 1.1925695879998879} 383 | {0, 1.3333333333333333} 384 | {-0.59628479399994394, 1.1925695879998879} 385 | {-1.1925695879998879, 0.59628479399994394} 386 | {-1.3333333333333333, 0} 387 | {-1.1925695879998879, -0.59628479399994394} 388 | 389 | Style 390 | 391 | fill 392 | 393 | Color 394 | 395 | b 396 | 0.690196 397 | g 398 | 0.690196 399 | r 400 | 0.690196 401 | 402 | 403 | shadow 404 | 405 | Draws 406 | NO 407 | 408 | stroke 409 | 410 | CornerRadius 411 | 9 412 | 413 | 414 | Text 415 | 416 | Text 417 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 418 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 419 | {\colortbl;\red255\green255\blue255;} 420 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 421 | 422 | \f0\fs24 \cf0 service-1} 423 | 424 | 425 | 426 | Bounds 427 | {{9, 8.9999999999999432}, {108, 117}} 428 | Class 429 | ShapedGraphic 430 | ID 431 | 200 432 | Magnets 433 | 434 | {-0.59628479399994394, -1.1925695879998879} 435 | {0, -1.3333333333333333} 436 | {0.59628479399994427, -1.1925695879998874} 437 | {1.1925695879998879, -0.59628479399994394} 438 | {1.3333333333333333, 5.9211894646675012e-16} 439 | {1.1925695879998874, 0.59628479399994427} 440 | {0.59628479399994416, 1.1925695879998879} 441 | {0, 1.3333333333333333} 442 | {-0.59628479399994416, 1.1925695879998879} 443 | {-1.1925695879998879, 0.59628479399994405} 444 | {-1.3333333333333333, 0} 445 | {-1.1925695879998879, -0.59628479399994405} 446 | 447 | Style 448 | 449 | fill 450 | 451 | Draws 452 | NO 453 | 454 | shadow 455 | 456 | Draws 457 | NO 458 | 459 | stroke 460 | 461 | Pattern 462 | 1 463 | 464 | 465 | Text 466 | 467 | Align 468 | 0 469 | Text 470 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 471 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 472 | {\colortbl;\red255\green255\blue255;} 473 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural 474 | 475 | \f0\fs24 \cf0 host-1} 476 | 477 | TextPlacement 478 | 0 479 | 480 | 481 | ID 482 | 196 483 | 484 | 485 | Class 486 | Group 487 | Graphics 488 | 489 | 490 | Class 491 | LineGraphic 492 | FontInfo 493 | 494 | Font 495 | Helvetica 496 | Size 497 | 12 498 | 499 | Head 500 | 501 | ID 502 | 203 503 | 504 | ID 505 | 202 506 | Points 507 | 508 | {63, 189.5} 509 | {63, 216.00000000000006} 510 | 511 | Style 512 | 513 | shadow 514 | 515 | Draws 516 | NO 517 | 518 | stroke 519 | 520 | HeadArrow 521 | FilledArrow 522 | Legacy 523 | 524 | LineType 525 | 1 526 | TailArrow 527 | 0 528 | 529 | 530 | Tail 531 | 532 | ID 533 | 204 534 | 535 | 536 | 537 | Bounds 538 | {{18, 216.00000000000006}, {90, 27}} 539 | Class 540 | ShapedGraphic 541 | ID 542 | 203 543 | Magnets 544 | 545 | {-0.59628479399994394, -1.1925695879998879} 546 | {0, -1.3333333333333333} 547 | {0.59628479399994427, -1.1925695879998874} 548 | {1.1925695879998879, -0.59628479399994394} 549 | {1.3333333333333333, 0} 550 | {1.1925695879998879, 0.59628479399994394} 551 | {0.59628479399994394, 1.1925695879998879} 552 | {0, 1.3333333333333333} 553 | {-0.59628479399994394, 1.1925695879998879} 554 | {-1.1925695879998879, 0.59628479399994394} 555 | {-1.3333333333333333, 0} 556 | {-1.1925695879998879, -0.59628479399994394} 557 | 558 | Style 559 | 560 | fill 561 | 562 | Color 563 | 564 | b 565 | 0.666667 566 | g 567 | 0.74902 568 | r 569 | 0.458824 570 | 571 | 572 | shadow 573 | 574 | Draws 575 | NO 576 | 577 | stroke 578 | 579 | CornerRadius 580 | 9 581 | 582 | 583 | Text 584 | 585 | Text 586 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 587 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 588 | {\colortbl;\red255\green255\blue255;} 589 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 590 | 591 | \f0\fs24 \cf0 collector-2} 592 | 593 | 594 | 595 | Bounds 596 | {{18, 162}, {90, 27}} 597 | Class 598 | ShapedGraphic 599 | ID 600 | 204 601 | Magnets 602 | 603 | {-0.59628479399994394, -1.1925695879998879} 604 | {0, -1.3333333333333333} 605 | {0.59628479399994427, -1.1925695879998874} 606 | {1.1925695879998879, -0.59628479399994394} 607 | {1.3333333333333333, 0} 608 | {1.1925695879998879, 0.59628479399994394} 609 | {0.59628479399994394, 1.1925695879998879} 610 | {0, 1.3333333333333333} 611 | {-0.59628479399994394, 1.1925695879998879} 612 | {-1.1925695879998879, 0.59628479399994394} 613 | {-1.3333333333333333, 0} 614 | {-1.1925695879998879, -0.59628479399994394} 615 | 616 | Style 617 | 618 | fill 619 | 620 | Color 621 | 622 | b 623 | 0.690196 624 | g 625 | 0.690196 626 | r 627 | 0.690196 628 | 629 | 630 | shadow 631 | 632 | Draws 633 | NO 634 | 635 | stroke 636 | 637 | CornerRadius 638 | 9 639 | 640 | 641 | Text 642 | 643 | Text 644 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 645 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 646 | {\colortbl;\red255\green255\blue255;} 647 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 648 | 649 | \f0\fs24 \cf0 service-2} 650 | 651 | 652 | 653 | Bounds 654 | {{9, 135}, {108, 117}} 655 | Class 656 | ShapedGraphic 657 | ID 658 | 205 659 | Magnets 660 | 661 | {-0.59628479399994394, -1.1925695879998879} 662 | {0, -1.3333333333333333} 663 | {0.59628479399994427, -1.1925695879998874} 664 | {1.1925695879998879, -0.59628479399994394} 665 | {1.3333333333333333, 5.9211894646675012e-16} 666 | {1.1925695879998874, 0.59628479399994427} 667 | {0.59628479399994416, 1.1925695879998879} 668 | {0, 1.3333333333333333} 669 | {-0.59628479399994416, 1.1925695879998879} 670 | {-1.1925695879998879, 0.59628479399994405} 671 | {-1.3333333333333333, 0} 672 | {-1.1925695879998879, -0.59628479399994405} 673 | 674 | Style 675 | 676 | fill 677 | 678 | Draws 679 | NO 680 | 681 | shadow 682 | 683 | Draws 684 | NO 685 | 686 | stroke 687 | 688 | Pattern 689 | 1 690 | 691 | 692 | Text 693 | 694 | Align 695 | 0 696 | Text 697 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 698 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 699 | {\colortbl;\red255\green255\blue255;} 700 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural 701 | 702 | \f0\fs24 \cf0 host-2} 703 | 704 | TextPlacement 705 | 0 706 | 707 | 708 | ID 709 | 201 710 | 711 | 712 | ID 713 | 195 714 | 715 | 716 | Bounds 717 | {{189, 216}, {90, 27}} 718 | Class 719 | ShapedGraphic 720 | ID 721 | 207 722 | Magnets 723 | 724 | {-0.59628479399994394, -1.1925695879998879} 725 | {0, -1.3333333333333333} 726 | {0.59628479399994394, -1.1925695879998879} 727 | {1.1925695879998879, -0.59628479399994394} 728 | {1.3333333333333333, 0} 729 | {1.1925695879998879, 0.59628479399994394} 730 | {0.59628479399994394, 1.1925695879998879} 731 | {0, 1.3333333333333333} 732 | {-0.59628479399994394, 1.1925695879998879} 733 | {-1.1925695879998877, 0.59628479399994361} 734 | {-1.3333333333333335, 0} 735 | {-1.1925695879998877, -0.59628479399994361} 736 | 737 | Style 738 | 739 | fill 740 | 741 | Color 742 | 743 | b 744 | 0.709804 745 | g 746 | 0.623529 747 | r 748 | 0.415686 749 | 750 | 751 | shadow 752 | 753 | Draws 754 | NO 755 | 756 | stroke 757 | 758 | CornerRadius 759 | 9 760 | 761 | 762 | Text 763 | 764 | Text 765 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 766 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 767 | {\colortbl;\red255\green255\blue255;} 768 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 769 | 770 | \f0\fs24 \cf0 analyzer} 771 | 772 | 773 | 774 | Class 775 | Group 776 | Graphics 777 | 778 | 779 | Bounds 780 | {{405, 152.99999999999994}, {90, 27}} 781 | Class 782 | ShapedGraphic 783 | ID 784 | 179 785 | Magnets 786 | 787 | {-0.59628479399994394, -1.1925695879998879} 788 | {0, -1.3333333333333333} 789 | {0.59628479399994394, -1.1925695879998879} 790 | {1.1925695879998879, -0.59628479399994394} 791 | {1.3333333333333333, 0} 792 | {1.1925695879998879, 0.59628479399994394} 793 | {0.59628479399994394, 1.1925695879998879} 794 | {0, 1.3333333333333333} 795 | {-0.59628479399994394, 1.1925695879998879} 796 | {-1.1925695879998879, 0.59628479399994394} 797 | {-1.3333333333333333, 0} 798 | {-1.1925695879998879, -0.59628479399994394} 799 | 800 | Style 801 | 802 | fill 803 | 804 | Color 805 | 806 | b 807 | 0.631835 808 | g 809 | 0.816659 810 | r 811 | 0.82 812 | 813 | 814 | shadow 815 | 816 | Draws 817 | NO 818 | 819 | stroke 820 | 821 | CornerRadius 822 | 9 823 | 824 | 825 | Text 826 | 827 | Text 828 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 829 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 830 | {\colortbl;\red255\green255\blue255;} 831 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 832 | 833 | \f0\fs24 \cf0 grafana} 834 | 835 | 836 | 837 | Bounds 838 | {{405, 117}, {90, 27}} 839 | Class 840 | ShapedGraphic 841 | ID 842 | 180 843 | Magnets 844 | 845 | {-0.59628479399994394, -1.1925695879998879} 846 | {0, -1.3333333333333333} 847 | {0.59628479399994394, -1.1925695879998879} 848 | {1.1925695879998879, -0.59628479399994394} 849 | {1.3333333333333333, 0} 850 | {1.1925695879998879, 0.59628479399994394} 851 | {0.59628479399994394, 1.1925695879998879} 852 | {0, 1.3333333333333333} 853 | {-0.59628479399994394, 1.1925695879998879} 854 | {-1.1925695879998879, 0.59628479399994394} 855 | {-1.3333333333333333, 0} 856 | {-1.1925695879998879, -0.59628479399994394} 857 | 858 | Style 859 | 860 | fill 861 | 862 | Color 863 | 864 | b 865 | 0.478521 866 | g 867 | 0.625823 868 | r 869 | 0.63 870 | 871 | 872 | shadow 873 | 874 | Draws 875 | NO 876 | 877 | stroke 878 | 879 | CornerRadius 880 | 9 881 | 882 | 883 | Text 884 | 885 | Text 886 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 887 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 888 | {\colortbl;\red255\green255\blue255;} 889 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 890 | 891 | \f0\fs24 \cf0 nginx} 892 | 893 | 894 | 895 | Bounds 896 | {{396, 90}, {108, 99}} 897 | Class 898 | ShapedGraphic 899 | ID 900 | 181 901 | Magnets 902 | 903 | {-0.59628479399994405, -1.1925695879998879} 904 | {0, -1.3333333333333335} 905 | {0.59628479399994405, -1.1925695879998879} 906 | {1.1925695879998881, -0.59628479399994383} 907 | {1.3333333333333333, 5.9211894646675012e-16} 908 | {1.1925695879998874, 0.59628479399994427} 909 | {0.59628479399994394, 1.1925695879998879} 910 | {0, 1.3333333333333333} 911 | {-0.59628479399994394, 1.1925695879998879} 912 | {-1.1925695879998879, 0.59628479399994394} 913 | {-1.3333333333333333, 0} 914 | {-1.1925695879998881, -0.59628479399994383} 915 | 916 | Style 917 | 918 | fill 919 | 920 | Draws 921 | NO 922 | 923 | shadow 924 | 925 | Draws 926 | NO 927 | 928 | stroke 929 | 930 | Pattern 931 | 1 932 | 933 | 934 | Text 935 | 936 | Align 937 | 0 938 | Text 939 | {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 940 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 941 | {\colortbl;\red255\green255\blue255;} 942 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural 943 | 944 | \f0\fs24 \cf0 dashboard} 945 | 946 | TextPlacement 947 | 0 948 | 949 | 950 | ID 951 | 178 952 | 953 | 954 | Class 955 | LineGraphic 956 | FontInfo 957 | 958 | Font 959 | Helvetica 960 | Size 961 | 12 962 | 963 | Head 964 | 965 | ID 966 | 181 967 | 968 | ID 969 | 187 970 | Points 971 | 972 | {446.05667356140276, 53.536374846653089} 973 | {450, 90} 974 | 975 | Style 976 | 977 | shadow 978 | 979 | Draws 980 | NO 981 | 982 | stroke 983 | 984 | HeadArrow 985 | FilledArrow 986 | HopLines 987 | 988 | HopType 989 | 4 990 | Legacy 991 | 992 | LineType 993 | 1 994 | TailArrow 995 | 0 996 | 997 | 998 | Tail 999 | 1000 | ID 1001 | 186 1002 | 1003 | 1004 | 1005 | Class 1006 | LineGraphic 1007 | FontInfo 1008 | 1009 | Font 1010 | Helvetica 1011 | Size 1012 | 12 1013 | 1014 | ID 1015 | 220 1016 | Points 1017 | 1018 | {405, 166.49999999999994} 1019 | {369, 99} 1020 | 1021 | Style 1022 | 1023 | shadow 1024 | 1025 | Draws 1026 | NO 1027 | 1028 | stroke 1029 | 1030 | HeadArrow 1031 | FilledArrow 1032 | HopLines 1033 | 1034 | HopType 1035 | 4 1036 | Legacy 1037 | 1038 | LineType 1039 | 1 1040 | TailArrow 1041 | 0 1042 | 1043 | 1044 | Tail 1045 | 1046 | ID 1047 | 179 1048 | Info 1049 | 11 1050 | 1051 | 1052 | 1053 | Class 1054 | LineGraphic 1055 | FontInfo 1056 | 1057 | Font 1058 | Helvetica 1059 | Size 1060 | 12 1061 | 1062 | ID 1063 | 219 1064 | Points 1065 | 1066 | {278.72690122183508, 222.79096481672474} 1067 | {297, 189} 1068 | {270, 162} 1069 | 1070 | Style 1071 | 1072 | shadow 1073 | 1074 | Draws 1075 | NO 1076 | 1077 | stroke 1078 | 1079 | HeadArrow 1080 | FilledArrow 1081 | HopLines 1082 | 1083 | HopType 1084 | 4 1085 | Legacy 1086 | 1087 | LineType 1088 | 1 1089 | TailArrow 1090 | 0 1091 | 1092 | 1093 | Tail 1094 | 1095 | ID 1096 | 207 1097 | Info 1098 | 4 1099 | 1100 | 1101 | 1102 | Class 1103 | LineGraphic 1104 | FontInfo 1105 | 1106 | Font 1107 | Helvetica 1108 | Size 1109 | 12 1110 | 1111 | ID 1112 | 218 1113 | Points 1114 | 1115 | {107.72690122183506, 96.790964816724681} 1116 | {126, 72} 1117 | 1118 | Style 1119 | 1120 | shadow 1121 | 1122 | Draws 1123 | NO 1124 | 1125 | stroke 1126 | 1127 | HeadArrow 1128 | FilledArrow 1129 | HopLines 1130 | 1131 | HopType 1132 | 4 1133 | Legacy 1134 | 1135 | LineType 1136 | 1 1137 | TailArrow 1138 | 0 1139 | 1140 | 1141 | Tail 1142 | 1143 | ID 1144 | 198 1145 | Info 1146 | 4 1147 | 1148 | 1149 | 1150 | Class 1151 | LineGraphic 1152 | FontInfo 1153 | 1154 | Font 1155 | Helvetica 1156 | Size 1157 | 12 1158 | 1159 | ID 1160 | 217 1161 | Points 1162 | 1163 | {108.10623347014325, 222.46522402434053} 1164 | {189, 153} 1165 | 1166 | Style 1167 | 1168 | shadow 1169 | 1170 | Draws 1171 | NO 1172 | 1173 | stroke 1174 | 1175 | HeadArrow 1176 | FilledArrow 1177 | HopLines 1178 | 1179 | HopType 1180 | 4 1181 | Legacy 1182 | 1183 | LineType 1184 | 1 1185 | TailArrow 1186 | 0 1187 | 1188 | 1189 | Tail 1190 | 1191 | ID 1192 | 203 1193 | Info 1194 | 4 1195 | 1196 | 1197 | 1198 | Class 1199 | LineGraphic 1200 | FontInfo 1201 | 1202 | Font 1203 | Helvetica 1204 | Size 1205 | 12 1206 | 1207 | Head 1208 | 1209 | ID 1210 | 207 1211 | Info 1212 | 12 1213 | 1214 | ID 1215 | 213 1216 | Points 1217 | 1218 | {85.850132838999897, 117.35694116469506} 1219 | {189.27309913922949, 222.79096487088444} 1220 | 1221 | Style 1222 | 1223 | shadow 1224 | 1225 | Draws 1226 | NO 1227 | 1228 | stroke 1229 | 1230 | HeadArrow 1231 | FilledArrow 1232 | HopLines 1233 | 1234 | HopType 1235 | 4 1236 | Legacy 1237 | 1238 | LineType 1239 | 1 1240 | TailArrow 1241 | 0 1242 | 1243 | 1244 | Tail 1245 | 1246 | ID 1247 | 198 1248 | 1249 | 1250 | 1251 | Class 1252 | LineGraphic 1253 | FontInfo 1254 | 1255 | Font 1256 | Helvetica 1257 | Size 1258 | 12 1259 | 1260 | Head 1261 | 1262 | ID 1263 | 207 1264 | 1265 | ID 1266 | 212 1267 | Points 1268 | 1269 | {107.72690086077051, 236.20903512911562} 1270 | {189, 229.5} 1271 | 1272 | Style 1273 | 1274 | shadow 1275 | 1276 | Draws 1277 | NO 1278 | 1279 | stroke 1280 | 1281 | HeadArrow 1282 | FilledArrow 1283 | HopLines 1284 | 1285 | HopType 1286 | 4 1287 | Legacy 1288 | 1289 | LineType 1290 | 1 1291 | TailArrow 1292 | 0 1293 | 1294 | 1295 | Tail 1296 | 1297 | ID 1298 | 203 1299 | Info 1300 | 6 1301 | 1302 | 1303 | 1304 | GridInfo 1305 | 1306 | ShowsGrid 1307 | YES 1308 | SnapsToGrid 1309 | YES 1310 | 1311 | GuidesLocked 1312 | NO 1313 | GuidesVisible 1314 | YES 1315 | HPages 1316 | 1 1317 | ImageCounter 1318 | 1 1319 | KeepToScale 1320 | 1321 | Layers 1322 | 1323 | 1324 | Lock 1325 | NO 1326 | Name 1327 | Layer 1 1328 | Print 1329 | YES 1330 | View 1331 | YES 1332 | 1333 | 1334 | LayoutInfo 1335 | 1336 | Animate 1337 | NO 1338 | HierarchicalOrientation 1339 | 3 1340 | circoMinDist 1341 | 43.618499999999997 1342 | circoSeparation 1343 | 0.0 1344 | layoutEngine 1345 | dot 1346 | neatoLineLength 1347 | 0.20000000298023224 1348 | neatoSeparation 1349 | 0.0 1350 | twopiSeparation 1351 | 0.0 1352 | 1353 | LinksVisible 1354 | NO 1355 | MagnetsVisible 1356 | NO 1357 | MasterSheets 1358 | 1359 | ModificationDate 1360 | 2015-08-09 21:20:55 +0000 1361 | Modifier 1362 | C J Silverio 1363 | NotesVisible 1364 | NO 1365 | Orientation 1366 | 2 1367 | OriginVisible 1368 | NO 1369 | PageBreaks 1370 | YES 1371 | PrintInfo 1372 | 1373 | NSBottomMargin 1374 | 1375 | float 1376 | 41 1377 | 1378 | NSHorizonalPagination 1379 | 1380 | coded 1381 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG 1382 | 1383 | NSLeftMargin 1384 | 1385 | float 1386 | 18 1387 | 1388 | NSPaperSize 1389 | 1390 | size 1391 | {612, 792} 1392 | 1393 | NSPrintReverseOrientation 1394 | 1395 | coded 1396 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG 1397 | 1398 | NSRightMargin 1399 | 1400 | float 1401 | 18 1402 | 1403 | NSTopMargin 1404 | 1405 | float 1406 | 18 1407 | 1408 | 1409 | PrintOnePage 1410 | 1411 | ReadOnly 1412 | NO 1413 | RowAlign 1414 | 1 1415 | RowSpacing 1416 | 36 1417 | SheetTitle 1418 | Canvas 1 1419 | SmartAlignmentGuidesActive 1420 | YES 1421 | SmartDistanceGuidesActive 1422 | YES 1423 | UniqueID 1424 | 1 1425 | UseEntirePage 1426 | 1427 | VPages 1428 | 1 1429 | WindowInfo 1430 | 1431 | CurrentSheet 1432 | 0 1433 | Expanded_Canvases 1434 | 1435 | Frame 1436 | {{48, 0}, {1228, 777}} 1437 | ShowInfo 1438 | 1439 | ShowRuler 1440 | 1441 | Sidebar 1442 | 1443 | SidebarWidth 1444 | 230 1445 | TopSlabHeight 1446 | 250 1447 | VisibleRegion 1448 | {{-54, 0}, {684, 632}} 1449 | Zoom 1450 | 1 1451 | ZoomValues 1452 | 1453 | 1454 | Canvas 1 1455 | 1 1456 | 1 1457 | 1458 | 1459 | 1460 | 1461 | 1462 | --------------------------------------------------------------------------------