Webinar - Building Custom Extensions With AppDynamics
-
Upload
todd-radel -
Category
Technology
-
view
759 -
download
1
Transcript of Webinar - Building Custom Extensions With AppDynamics
AppDynamics Webinars:Building Custom ExtensionsTodd Radel, Senior Manager – Customer Advocacy
Agenda
• Introduction• Writing a script extension• Writing a Java extension• Using your custom metrics• Best practices
• Office hours
Copyright © 2015 AppDynamics. All rights reserved. 3
About Me
Todd RadelSENIOR MANAGERCUSTOMER 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
+1 (484) 857-2335
tradel
todd.radel
linkedin.com/in/tradel
INTRODUCTION
Copyright © 2015 AppDynamics. All rights reserved. 5
What is an Extension?
• Plugs in to Machine Agent• Imports additional metrics to AppDynamics
Copyright © 2015 AppDynamics. All rights reserved. 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. 7
Example Extensions
• Apache Server Monitor• F5 Monitor• ActiveMQ Monitor
…or build your own!
Copyright © 2015 AppDynamics. All rights reserved. 8
Use Cases
• Run a SQL query every few minutes to count sales/signups/etc.
• Extract metrics from custom instrumentation• Eliminate redundant tools
SCRIPT EXTENSIONS
Copyright © 2015 AppDynamics. All rights reserved. 10
Anatomy of a Simple Script Extension
• Script file• monitor.xml – describes the extension
Copyright © 2015 AppDynamics. All rights reserved. 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. 12
Simple Extension Script
Copyright © 2015 AppDynamics. All rights reserved. 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. 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?
AVERAGEAverage of all reported values in that minute
AVERAGEAverage of all one-minute values
INDIVIDUALAverage of metric values across each node in the tier
SUMSum of all reported values in the minute
SUMSum of all one-minute values
COLLECTIVESum of metric values across each node in the tier
OBSERVATIONLast reported value in the minute
CURRENTLast reported one-minute value
Copyright © 2015 AppDynamics. All rights reserved. 15
Simple monitor.xml for a Script
”periodic” or “continuous”
script filename
Copyright © 2015 AppDynamics. All rights reserved. 16
OS-Specific monitor.xml for a Script
JAVA EXTENSIONS
Copyright © 2015 AppDynamics. All rights reserved. 18
Anatomy of a Java Extension
• Class file or JAR file• Dependent libraries• Configuration file• monitor.xml
Copyright © 2015 AppDynamics. All rights reserved. 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. 20
Example
• Write an extension to import metrics from the Linux collectd(8) daemon
Copyright © 2015 AppDynamics. All rights reserved. 21
Sample Execute() Method
Copyright © 2015 AppDynamics. All rights reserved. 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. 23
Monitor.xml for Java
Copyright © 2015 AppDynamics. All rights reserved. 24
Installation
HTTP LISTENER
Copyright © 2015 AppDynamics. All rights reserved. 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. 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. 28
Sending Metric Data
Copyright © 2015 AppDynamics. All rights reserved. 29
Sending Metrics as JSON
USING CUSTOM METRICS
Copyright © 2015 AppDynamics. All rights reserved. 31
Locating Your Custom Metrics
Tier name
Node name
Metric path
Copyright © 2015 AppDynamics. All rights reserved. 32
Create Custom Dashboards
Copyright © 2015 AppDynamics. All rights reserved. 33
Sample Custom Dashboard
Copyright © 2015 AppDynamics. All rights reserved. 34
Create Health Rules
BEST PRACTICES
Copyright © 2015 AppDynamics. All rights reserved. 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. 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. 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. 39
Contents of Your README.md
• Description• Requirements• Installation• Configuration• Metrics Produced• How to Contribute (optional)• History/Release Notes• Screenshots
FURTHER READING
Copyright © 2015 AppDynamics. All rights reserved. 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. 42
Sample Java code
• Apache Monitoring Extension• URL Monitoring Extension
• Follow along as I finish these extensions!https://github.com/tradel/collectd-monitoring-extensionhttps://github.com/tradel/file-count-monitoring-extension
Thank You