Webinar - Building Custom Extensions With AppDynamics

1.258 visualizações

Publicada em

How to build extensions to bring your own metrics into AppDynamics

Publicada em: Tecnologia

Webinar - Building Custom Extensions With AppDynamics

  1. 1. AppDynamics Webinars: Building Custom Extensions Todd Radel, Senior Manager – Customer Advocacy
  2. 2. Agenda • Introduction • Writing a script extension • Writing a Java extension • Using your custom metrics • Best practices • Office hours
  3. 3. About Me Todd Radel SENIOR MANAGER CUSTOMER ADVOCACY TEAM • More than 20 years experience in the software industry • Java, .NET, Python, Perl • Author of the Python SDK for AppDynamics REST API • Author of six AppDynamics Extensions: F5, Tibco EMS, Redis, Keynote, SQL, URL Monitor Copyright © 2015 AppDynamics. All rights reserved. 3 tradel@appdynamics.com +1 (484) 857-2335 tradel todd.radel linkedin.com/in/tradel
  4. 4. INTRODUCTION
  5. 5. What is an Extension? • Plugs in to Machine Agent • Imports additional metrics to AppDynamics Copyright © 2015 AppDynamics. All rights reserved. 5
  6. 6. Why Use Extensions? “I already have Graphite/Nagios/my own custom tools…” BUT: • Add more color to overall AppDynamics picture • Baseline and alert on custom metrics • Create custom dashboards • Work towards a “single pane of glass” Copyright © 2015 AppDynamics. All rights reserved. 6
  7. 7. Example Extensions • Apache Server Monitor • F5 Monitor • ActiveMQ Monitor …or build your own! Copyright © 2015 AppDynamics. All rights reserved. 7
  8. 8. Use Cases • Run a SQL query every few minutes to count sales/signups/etc. • Extract metrics from custom instrumentation • Eliminate redundant tools Copyright © 2015 AppDynamics. All rights reserved. 8
  9. 9. SCRIPT EXTENSIONS
  10. 10. Anatomy of a Simple Script Extension • Script file • monitor.xml – describes the extension Copyright © 2015 AppDynamics. All rights reserved. 10
  11. 11. Example • Write an extension to count the number of files in /var/tmp and alert if there are too many Copyright © 2015 AppDynamics. All rights reserved. 11
  12. 12. Simple Extension Script Copyright © 2015 AppDynamics. All rights reserved. 12
  13. 13. Script Output name=Custom Metrics|File Count|count, value=29, aggregator=OBSERVATION, time-rollup=CURRENT, cluster-rollup=COLLECTIVE • name – path and name of your metric • value – metric value • aggregator – how to handle multiple values in one interval • time-rollup – how to aggregate values over time • cluster-rollup – how to aggregate values over nodes Copyright © 2015 AppDynamics. All rights reserved. 13
  14. 14. Metric Aggregation Aggregation Time Rollup Cluster Rollup How should the controller handle multiple values in a single minute? How should values be aggregated over time? How should values be aggregated across nodes in a tier? AVERAGE Average of all reported values in that minute AVERAGE Average of all one-minute values INDIVIDUAL Average of metric values across each node in the tier SUM Sum of all reported values in the minute SUM Sum of all one-minute values COLLECTIVE Sum of metric values across each node in the tier OBSERVATION Last reported value in the minute CURRENT Last reported one-minute value Copyright © 2015 AppDynamics. All rights reserved. 14
  15. 15. Simple monitor.xml for a Script Copyright © 2015 AppDynamics. All rights reserved. 15 ”periodic” or “continuous” script filename
  16. 16. OS-Specific monitor.xml for a Script Copyright © 2015 AppDynamics. All rights reserved. 16
  17. 17. JAVA EXTENSIONS
  18. 18. Anatomy of a Java Extension • Class file or JAR file • Dependent libraries • Configuration file • monitor.xml Copyright © 2015 AppDynamics. All rights reserved. 18
  19. 19. Structuring Your Java Code • Can be a single class • Extend from com.singularity.ee.agent.systemagent.api.AManagedMonitor • Override and implement execute() method • Call getMetricWriter().printMetric() to send data Copyright © 2015 AppDynamics. All rights reserved. 19
  20. 20. Example • Write an extension to import metrics from the Linux collectd(8) daemon Copyright © 2015 AppDynamics. All rights reserved. 20
  21. 21. Sample Execute() Method Copyright © 2015 AppDynamics. All rights reserved. 21
  22. 22. Configuring Your Extension • Task arguments from monitor.xml are sent as first parameter to execute() method public TaskOutput execute(Map<String, String> args, TaskExecutionContext taskExecutionContext) throws TaskExecutionException { • Configure via external file (e.g. config.yml), read the file during execute() Copyright © 2015 AppDynamics. All rights reserved. 22
  23. 23. Monitor.xml for Java Copyright © 2015 AppDynamics. All rights reserved. 23
  24. 24. Installation Copyright © 2015 AppDynamics. All rights reserved. 24
  25. 25. HTTP LISTENER
  26. 26. When to use the HTTP Listener • When you don’t have control over the code • When the data collector runs on another machine Copyright © 2015 AppDynamics. All rights reserved. 26
  27. 27. Starting Machine Agent with HTTP Listener java -Dmetric.http.listener=true -Dmetric.http.listener.port=8000 -jar machineagent.jar Copyright © 2015 AppDynamics. All rights reserved. 27
  28. 28. Sending Metric Data Copyright © 2015 AppDynamics. All rights reserved. 28
  29. 29. Sending Metrics as JSON Copyright © 2015 AppDynamics. All rights reserved. 29
  30. 30. USING CUSTOM METRICS
  31. 31. Locating Your Custom Metrics Copyright © 2015 AppDynamics. All rights reserved. 31 Tier name Node name Metric path
  32. 32. Create Custom Dashboards Copyright © 2015 AppDynamics. All rights reserved. 32
  33. 33. Sample Custom Dashboard Copyright © 2015 AppDynamics. All rights reserved. 33
  34. 34. Create Health Rules Copyright © 2015 AppDynamics. All rights reserved. 34
  35. 35. BEST PRACTICES
  36. 36. Best Practices • Make it configurable via monitor.xml or config.yml • Allow a custom metric path • Write portable code • Send output to the machine agent log • Follow our “mavenized” project structure • Post the code on GitHub and encourage pull requests Copyright © 2015 AppDynamics. All rights reserved. 36
  37. 37. Increasing the Agent Metric Limit • If you don’t see all metrics in the controller UI • Check machine agent logs for “metric limit reached” • Add command line options and restart machine agent • Without custom extensions: java -jar machineagent.jar • With extensions: java -Xmx256m -Dappdynamics.agent.maxMetrics=10000 -jar machineagent.jar Copyright © 2015 AppDynamics. All rights reserved. 37
  38. 38. Publishing Your Extension • Remove any usernames/passwords/hostnames from configuration files • Add README.md and LICENSE files • Post the code on GitHub • Create new thread on AppDynamics Community to announce and publish! Copyright © 2015 AppDynamics. All rights reserved. 38
  39. 39. Contents of Your README.md • Description • Requirements • Installation • Configuration • Metrics Produced • How to Contribute (optional) • History/Release Notes • Screenshots Copyright © 2015 AppDynamics. All rights reserved. 39
  40. 40. FURTHER READING
  41. 41. Documentation • Extensions and Custom Metrics • Build a Monitoring Extension Using Java • Build a Monitoring Extension Using Scripts • Machine Agent HTTP Listener Copyright © 2015 AppDynamics. All rights reserved. 41
  42. 42. Sample Java code • Apache Monitoring Extension • URL Monitoring Extension • Follow along as I finish these extensions! https://github.com/tradel/collectd-monitoring-extension https://github.com/tradel/file-count-monitoring-extension Copyright © 2015 AppDynamics. All rights reserved. 42
  43. 43. Thank You

×