Monitoring Node.js
From Development to Production
IMPORTANT info regarding IBM speaker guidelines and disclaimers
• If your presentation has forward looking content, it is mandatory that you put the forward disclaimer as
slide 2 in your presentation (this is the “Please Note” slide, third slide down in this template).
• All presentations, whether they have future content or not, must include the mandatory “Notices and
Disclaimers” – slides 8 and 9 in the template. Insert these slides just before the “Thank You” slide in
your deck.
• Please refer to the FAQ document in the Speaker Kit regarding additional legal guidance for use of
photos, logos, customer references and analyst information.
• It is recommended to have your material reviewed by Legal if you have any concerns regarding your
content.
• Please submit your final presentation, using the instructions in the online Speaker Kit, by February
5th, 2016. Post your final file in native format using the following naming convention: session code.ppt
(For example, 1576.ppt)
• Disclosures regarding forward guidance is embedded in the tool and also available through this link:
• https://w3-03.ibm.com/finance/finsubp.nsf/WebPages/N01FF08SoftwareRevenueRecognitionGuidelinesRelatedtoProductDisclosures
• Please remove these instructions before finalizing your presentation.
2
Please Note:
3
• IBM’s statements regarding its plans, directions, and intent are subject to change or withdrawal without notice at IBM’s sole discretion.
• Information regarding potential future products is intended to outline our general product direction and it should not be relied on in
making a purchasing decision.
• The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any
material, code or functionality. Information about potential future products may not be incorporated into any contract.
• The development, release, and timing of any future features or functionality described for our products remains at our sole discretion.
• Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual
throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the
amount of multiprogramming in the user’s job stream, the I/O configuration, the storage configuration, and the workload processed.
Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.
© 2015 IBM Corporation4
1
Monitoring and Diagnostics Development
@Chris__Bailey
@seabaylea
“Any sufficiently advanced technology is
indistinguishable from magic”
– Arthur C Clarke (Clarke's Third Law)
6
Jane
Application Developer
What's our throughput?
What's our responsiveness?
Eric
QA Engineer
How is the application used?
Do our tests match usage?
Olivia
Application Owner
What's our availability?
Are we scaling to load?
Jim
Operations and Support
Do we have any errors?
What's the resource utilization?
Judith
CIO / CTO
How many customers do we have?
Whats the sales conversion rate?
Load Balancing
Which instances have capacity?
Any instance affinity to use?
Auto-Scaling
What's the instance utilization?
Should I scale in/out?
Health Management
Are instances in trouble?
Should I notify operations?
Accounting
What's the operational cost?
What's the ROI for this application?
Monitoring Personas
7
Monitoring Modules
8
• Common data collector for Node.js
• Producer/consumer event APIs, probes framework with dropins capability
• Resource and runtime metrics
• Tracing and request tracking
9
MQLight
HTTP
• Supports monitoring of a range of common modules
Monitoring Data Visualisation
10
11
MQTT
visualize
var appmetrics = require('appmetrics').start();
var http = require('http');
var server = http.createServer(function handler(req, res) {
…

}).listen(process.env.PORT || 3000);
console.log('App listening on port 3000');
});
and Health Centre
> node-hc app.js
MQTT

Broker
12
MQTT
visualize
var appmetrics = require('appmetrics').start();
var http = require('http');
var server = http.createServer(function handler(req, res) {
…

}).listen(process.env.PORT || 3000);
console.log('App listening on port 3000');
});
and Health Centre
> node-hc app.js
13
UDP
Carbon
Whisper Whisper
visualize
StatsD
var appmetrics = require('appmetrics-statsd').StatsD();
var http = require('http');
var server = http.createServer(function handler(req, res) {
…

}).listen(process.env.PORT || 3000);
console.log('App listening on port 3000');
});
and StatsD
14
ES ES ES ES
client.bulk()
var appmetrics = require('appmetrics-elk').monitor();
var http = require('http');
var server = http.createServer(function handler(req, res) {
…

}).listen(process.env.PORT || 3000);
console.log('App listening on port 3000');
});
visualize
and ELK
15
DEMO(s)
16
var	appmetrics	=	require('appmetrics');	
var	data	=	{	
	 time:	Date.now(),	
	 mydata:	 7	
}	 	
appmetrics.emit('myevent',	data);
• emit() API is on the appmetrics object
• Convention to have a “time” field
− Allows it to be used in ElasticSearch
var	appmetrics	=	require('appmetrics');	
var	monitor	=	appmetrics.monitor()		
monitor.on('myevent',	function(data)	{	
	 console.log('[myevent]	'	+	
data.mydata);	
});
• Events are on the monitored instance object
− Allows for future remote monitoring
Custom Monitoring
17
var	Probe	=	require(‘../lib/probe.js');	
var	aspect	=	require(‘../lib/aspect.js’);	
var	request	=	require(‘../lib/request.js’);	
var	util	=	require(‘util');	
var	am	=	require('appmetrics');	
function	MyProbe()	{	
				Probe.call(this,	‘appmetrics’);	
}	
util.inherits(MyProbe,	Probe);	
MyProbe.prototype.attach	=	function	(name,	target){}	
MyProbe.protoype.metricsEnd	=	function	()	{}
• Certain amount of boilerplate required
• Sets probe name (the module probed)
• Additional boilerplate to support:
− Dynamic add/remove
− Inclusion in request tracking
− Probe configuration
− etc.
Custom Module Probes
https://developer.ibm.com/open/2015/12/11/writing-appmetrics-probe/
18
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
Aspects API
19
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
aspect.before(target.Server.prototype,	['on',	'addListener'],	function(obj,	methodName,	args,	data)	{	
				if	(args[0]	!==	'request')	return;	
				aspect.aroundCallback(args,	data,	function(obj,	args)	{	
	this.metricsProbeStart(data,	args);	
								aspect.after(res,	'end',	function(obj,	args,	ret)	{	
												this.metricsProbeEnd(data,	args);	
								});	
				});	
});
Aspects API
20
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
aspect.before(target.Server.prototype,	['on',	'addListener'],	function(obj,	methodName,	args,	data)	{	
				if	(args[0]	!==	'request')	return;	
				aspect.aroundCallback(args,	data,	function(obj,	args)	{	
	this.metricsProbeStart(data,	args);	
								aspect.after(res,	'end',	function(obj,	args,	ret)	{	
												this.metricsProbeEnd(data,	args);	
								});	
				});	
});
Aspects API
21
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
aspect.before(target.Server.prototype,	['on',	'addListener'],	function(obj,	methodName,	args,	data)	{	
				if	(args[0]	!==	'request')	return;	
				aspect.aroundCallback(args,	data,	function(obj,	args)	{	
	this.metricsProbeStart(data,	args);	
								aspect.after(res,	'end',	function(obj,	args,	ret)	{	
												this.metricsProbeEnd(data,	args);	
								});	
				});	
});
Aspects API
22
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
aspect.before(target.Server.prototype,	['on',	'addListener'],	function(obj,	methodName,	args,	data)	{	
				if	(args[0]	!==	'request')	return;	
				aspect.aroundCallback(args,	data,	function(obj,	args)	{	
	this.metricsProbeStart(data,	args);	
								aspect.after(res,	'end',	function(obj,	args,	ret)	{	
												this.metricsProbeEnd(data,	args);	
								});	
				});	
});
Aspects API
23
aspect.before(obj,	methods,	func);	
aspect.after(obj,	methods,	func);	
aspect.around(obj,	methods,	func1,	func2);	
aspect.aroundCallback(obj,	methods,	func1,	func2);
• Provides APIs to locate and patch functions
− before, after and around supported
aspect.before(target.Server.prototype,	['on',	'addListener'],	function(obj,	methodName,	args,	data)	{	
				if	(args[0]	!==	'request')	return;	
				aspect.aroundCallback(args,	data,	function(obj,	args)	{	
	this.metricsProbeStart(data,	args);	
								aspect.after(res,	'end',	function(obj,	args,	ret)	{	
												this.metricsProbeEnd(data,	args);	
								});	
				});	
});
Aspects API
MyProbe.protoype.metricsEnd	=	function	(data,	args)	{	
am.emit(’http’,	{time:	data.timer.startTimeMillis,	url:	args[0].url,	duration:	data.timer.timeDelta);	
};
Contributing to
24
• Raise an issue for an enhancement or a bug!
• If you want to make the change yourself:
• Fork us and make a pull request
• Sign the Contributor License Agreement!
https://github.com/RuntimeTools/appmetrics
25
Questions?
Notices and Disclaimers
26
Copyright © 2016 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in any form without written permission
from IBM.
U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM.
Information in these presentations (including information relating to products that have not yet been announced by IBM) has been reviewed for accuracy as of the date of initial
publication and could include unintentional technical or typographical errors. IBM shall have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED
"AS IS" WITHOUT ANY WARRANTY, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS
INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION, LOSS OF PROFIT OR LOSS OF OPPORTUNITY. IBM products and
services are warranted according to the terms and conditions of the agreements under which they are provided.
Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice.
Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as illustrations of how those customers
have used IBM products and the results they may have achieved. Actual performance, cost, savings or other results in other operating environments may vary.
References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs or services available in all countries in
which IBM operates or does business.
Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily reflect the views of IBM. All materials and
discussions are provided for informational purposes only, and are neither intended to, nor shall constitute legal or other guidance or advice to any individual participant or their
specific situation.
It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel as to the identification and
interpretation of any relevant laws and regulatory requirements that may affect the customer’s business and any actions the customer may need to take to comply with such
laws. IBM does not provide legal advice or represent or warrant that its services or products will ensure that the customer is in compliance with any law
Notices and Disclaimers Con’t.
27
Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not
tested those products in connection with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products.
Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the
ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The provision of the information contained h erein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual
property right.
IBM, the IBM logo, ibm.com, Aspera®, Bluemix, Blueworks Live, CICS, Clearcase, Cognos®, DOORS®, Emptoris®, Enterprise Document Management System™, FASP®,
FileNet®, Global Business Services ®, Global Technology Services ®, IBM ExperienceOne™, IBM SmartCloud®, IBM Social Business®, Information on Demand, ILOG,
Maximo®, MQIntegrator®, MQSeries®, Netcool®, OMEGAMON, OpenPower, PureAnalytics™, PureApplication®, pureCluster™, PureCoverage®, PureData®,
PureExperience®, PureFlex®, pureQuery®, pureScale®, PureSystems®, QRadar®, Rational®, Rhapsody®, Smarter Commerce®, SoDA, SPSS, Sterling Commerce®,
StoredIQ, Tealeaf®, Tivoli®, Trusteer®, Unica®, urban{code}®, Watson, WebSphere®, Worklight®, X-Force® and System z® Z/OS, are trademarks of International Business
Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM
trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
Thank You
Your Feedback is Important!
Access the InterConnect 2016 Conference Attendee
Portal to complete your session surveys from your
smartphone,
laptop or conference kiosk.

InterConnect2016 Monitoring Nodejs

  • 1.
  • 2.
    IMPORTANT info regardingIBM speaker guidelines and disclaimers • If your presentation has forward looking content, it is mandatory that you put the forward disclaimer as slide 2 in your presentation (this is the “Please Note” slide, third slide down in this template). • All presentations, whether they have future content or not, must include the mandatory “Notices and Disclaimers” – slides 8 and 9 in the template. Insert these slides just before the “Thank You” slide in your deck. • Please refer to the FAQ document in the Speaker Kit regarding additional legal guidance for use of photos, logos, customer references and analyst information. • It is recommended to have your material reviewed by Legal if you have any concerns regarding your content. • Please submit your final presentation, using the instructions in the online Speaker Kit, by February 5th, 2016. Post your final file in native format using the following naming convention: session code.ppt (For example, 1576.ppt) • Disclosures regarding forward guidance is embedded in the tool and also available through this link: • https://w3-03.ibm.com/finance/finsubp.nsf/WebPages/N01FF08SoftwareRevenueRecognitionGuidelinesRelatedtoProductDisclosures • Please remove these instructions before finalizing your presentation. 2
  • 3.
    Please Note: 3 • IBM’sstatements regarding its plans, directions, and intent are subject to change or withdrawal without notice at IBM’s sole discretion. • Information regarding potential future products is intended to outline our general product direction and it should not be relied on in making a purchasing decision. • The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any material, code or functionality. Information about potential future products may not be incorporated into any contract. • The development, release, and timing of any future features or functionality described for our products remains at our sole discretion. • Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user’s job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.
  • 4.
    © 2015 IBMCorporation4 1 Monitoring and Diagnostics Development @Chris__Bailey @seabaylea
  • 5.
    “Any sufficiently advancedtechnology is indistinguishable from magic” – Arthur C Clarke (Clarke's Third Law)
  • 6.
    6 Jane Application Developer What's ourthroughput? What's our responsiveness? Eric QA Engineer How is the application used? Do our tests match usage? Olivia Application Owner What's our availability? Are we scaling to load? Jim Operations and Support Do we have any errors? What's the resource utilization? Judith CIO / CTO How many customers do we have? Whats the sales conversion rate? Load Balancing Which instances have capacity? Any instance affinity to use? Auto-Scaling What's the instance utilization? Should I scale in/out? Health Management Are instances in trouble? Should I notify operations? Accounting What's the operational cost? What's the ROI for this application? Monitoring Personas
  • 7.
  • 8.
    8 • Common datacollector for Node.js • Producer/consumer event APIs, probes framework with dropins capability • Resource and runtime metrics • Tracing and request tracking
  • 9.
    9 MQLight HTTP • Supports monitoringof a range of common modules
  • 10.
  • 11.
    11 MQTT visualize var appmetrics =require('appmetrics').start(); var http = require('http'); var server = http.createServer(function handler(req, res) { …
 }).listen(process.env.PORT || 3000); console.log('App listening on port 3000'); }); and Health Centre > node-hc app.js MQTT
 Broker
  • 12.
    12 MQTT visualize var appmetrics =require('appmetrics').start(); var http = require('http'); var server = http.createServer(function handler(req, res) { …
 }).listen(process.env.PORT || 3000); console.log('App listening on port 3000'); }); and Health Centre > node-hc app.js
  • 13.
    13 UDP Carbon Whisper Whisper visualize StatsD var appmetrics= require('appmetrics-statsd').StatsD(); var http = require('http'); var server = http.createServer(function handler(req, res) { …
 }).listen(process.env.PORT || 3000); console.log('App listening on port 3000'); }); and StatsD
  • 14.
    14 ES ES ESES client.bulk() var appmetrics = require('appmetrics-elk').monitor(); var http = require('http'); var server = http.createServer(function handler(req, res) { …
 }).listen(process.env.PORT || 3000); console.log('App listening on port 3000'); }); visualize and ELK
  • 15.
  • 16.
    16 var appmetrics = require('appmetrics'); var data = { time: Date.now(), mydata: 7 } appmetrics.emit('myevent', data); • emit() API is on the appmetrics object • Convention to have a “time” field − Allows it to be used in ElasticSearch var appmetrics = require('appmetrics'); var monitor = appmetrics.monitor() monitor.on('myevent', function(data) { console.log('[myevent] ' + data.mydata); }); • Events are on the monitored instance object − Allows for future remote monitoring Custom Monitoring
  • 17.
    17 var Probe = require(‘../lib/probe.js'); var aspect = require(‘../lib/aspect.js’); var request = require(‘../lib/request.js’); var util = require(‘util'); var am = require('appmetrics'); function MyProbe() { Probe.call(this, ‘appmetrics’); } util.inherits(MyProbe, Probe); MyProbe.prototype.attach = function (name, target){} MyProbe.protoype.metricsEnd = function () {} • Certain amountof boilerplate required • Sets probe name (the module probed) • Additional boilerplate to support: − Dynamic add/remove − Inclusion in request tracking − Probe configuration − etc. Custom Module Probes https://developer.ibm.com/open/2015/12/11/writing-appmetrics-probe/
  • 18.
  • 19.
    19 aspect.before(obj, methods, func); aspect.after(obj, methods, func); aspect.around(obj, methods, func1, func2); aspect.aroundCallback(obj, methods, func1, func2); • Provides APIsto locate and patch functions − before, after and around supported aspect.before(target.Server.prototype, ['on', 'addListener'], function(obj, methodName, args, data) { if (args[0] !== 'request') return; aspect.aroundCallback(args, data, function(obj, args) { this.metricsProbeStart(data, args); aspect.after(res, 'end', function(obj, args, ret) { this.metricsProbeEnd(data, args); }); }); }); Aspects API
  • 20.
    20 aspect.before(obj, methods, func); aspect.after(obj, methods, func); aspect.around(obj, methods, func1, func2); aspect.aroundCallback(obj, methods, func1, func2); • Provides APIsto locate and patch functions − before, after and around supported aspect.before(target.Server.prototype, ['on', 'addListener'], function(obj, methodName, args, data) { if (args[0] !== 'request') return; aspect.aroundCallback(args, data, function(obj, args) { this.metricsProbeStart(data, args); aspect.after(res, 'end', function(obj, args, ret) { this.metricsProbeEnd(data, args); }); }); }); Aspects API
  • 21.
    21 aspect.before(obj, methods, func); aspect.after(obj, methods, func); aspect.around(obj, methods, func1, func2); aspect.aroundCallback(obj, methods, func1, func2); • Provides APIsto locate and patch functions − before, after and around supported aspect.before(target.Server.prototype, ['on', 'addListener'], function(obj, methodName, args, data) { if (args[0] !== 'request') return; aspect.aroundCallback(args, data, function(obj, args) { this.metricsProbeStart(data, args); aspect.after(res, 'end', function(obj, args, ret) { this.metricsProbeEnd(data, args); }); }); }); Aspects API
  • 22.
    22 aspect.before(obj, methods, func); aspect.after(obj, methods, func); aspect.around(obj, methods, func1, func2); aspect.aroundCallback(obj, methods, func1, func2); • Provides APIsto locate and patch functions − before, after and around supported aspect.before(target.Server.prototype, ['on', 'addListener'], function(obj, methodName, args, data) { if (args[0] !== 'request') return; aspect.aroundCallback(args, data, function(obj, args) { this.metricsProbeStart(data, args); aspect.after(res, 'end', function(obj, args, ret) { this.metricsProbeEnd(data, args); }); }); }); Aspects API
  • 23.
    23 aspect.before(obj, methods, func); aspect.after(obj, methods, func); aspect.around(obj, methods, func1, func2); aspect.aroundCallback(obj, methods, func1, func2); • Provides APIsto locate and patch functions − before, after and around supported aspect.before(target.Server.prototype, ['on', 'addListener'], function(obj, methodName, args, data) { if (args[0] !== 'request') return; aspect.aroundCallback(args, data, function(obj, args) { this.metricsProbeStart(data, args); aspect.after(res, 'end', function(obj, args, ret) { this.metricsProbeEnd(data, args); }); }); }); Aspects API MyProbe.protoype.metricsEnd = function (data, args) { am.emit(’http’, {time: data.timer.startTimeMillis, url: args[0].url, duration: data.timer.timeDelta); };
  • 24.
    Contributing to 24 • Raisean issue for an enhancement or a bug! • If you want to make the change yourself: • Fork us and make a pull request • Sign the Contributor License Agreement! https://github.com/RuntimeTools/appmetrics
  • 25.
  • 26.
    Notices and Disclaimers 26 Copyright© 2016 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in any form without written permission from IBM. U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM. Information in these presentations (including information relating to products that have not yet been announced by IBM) has been reviewed for accuracy as of the date of initial publication and could include unintentional technical or typographical errors. IBM shall have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED "AS IS" WITHOUT ANY WARRANTY, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION, LOSS OF PROFIT OR LOSS OF OPPORTUNITY. IBM products and services are warranted according to the terms and conditions of the agreements under which they are provided. Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice. Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual performance, cost, savings or other results in other operating environments may vary. References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs or services available in all countries in which IBM operates or does business. Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily reflect the views of IBM. All materials and discussions are provided for informational purposes only, and are neither intended to, nor shall constitute legal or other guidance or advice to any individual participant or their specific situation. It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel as to the identification and interpretation of any relevant laws and regulatory requirements that may affect the customer’s business and any actions the customer may need to take to comply with such laws. IBM does not provide legal advice or represent or warrant that its services or products will ensure that the customer is in compliance with any law
  • 27.
    Notices and DisclaimersCon’t. 27 Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products in connection with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The provision of the information contained h erein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual property right. IBM, the IBM logo, ibm.com, Aspera®, Bluemix, Blueworks Live, CICS, Clearcase, Cognos®, DOORS®, Emptoris®, Enterprise Document Management System™, FASP®, FileNet®, Global Business Services ®, Global Technology Services ®, IBM ExperienceOne™, IBM SmartCloud®, IBM Social Business®, Information on Demand, ILOG, Maximo®, MQIntegrator®, MQSeries®, Netcool®, OMEGAMON, OpenPower, PureAnalytics™, PureApplication®, pureCluster™, PureCoverage®, PureData®, PureExperience®, PureFlex®, pureQuery®, pureScale®, PureSystems®, QRadar®, Rational®, Rhapsody®, Smarter Commerce®, SoDA, SPSS, Sterling Commerce®, StoredIQ, Tealeaf®, Tivoli®, Trusteer®, Unica®, urban{code}®, Watson, WebSphere®, Worklight®, X-Force® and System z® Z/OS, are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
  • 28.
    Thank You Your Feedbackis Important! Access the InterConnect 2016 Conference Attendee Portal to complete your session surveys from your smartphone, laptop or conference kiosk.