-
Notifications
You must be signed in to change notification settings - Fork 0
/
deployagent.html
919 lines (699 loc) · 43.9 KB
/
deployagent.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.7.4 at 11 Mar 2017
| Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="Date-Revision-yyyymmdd" content="20170311" />
<meta http-equiv="Content-Language" content="en" />
<title>Fine Grained Service Monitoring System – Installation Procedures FGSMS Agents</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.6.min.css" />
<link rel="stylesheet" href="./css/site.css" />
<link rel="stylesheet" href="./css/print.css" media="print" />
<script type="text/javascript" src="./js/apache-maven-fluido-1.6.min.js"></script>
</head>
<body class="topBarDisabled">
<a href="https://github.com/mil-oss/fgsms">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"
alt="Fork me on GitHub">
</a>
<div class="container-fluid">
<div id="banner">
<div class="pull-left"><a href="http://mil-oss.org/" id="bannerLeft"><img src="images/mil-oss-logo.png" alt="Fine Grained Service Monitoring System"/></a></div>
<div class="pull-right"><div id="bannerRight"><img src="images/fgsms_logo_small.png" /></div>
</div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li id="projectVersion">Version: 7.0.0<span class="divider">|</span></li>
<li class=""><a href="https://www.mil-oss.org" class="externalLink" title="MIL-OSS">MIL-OSS</a><span class="divider">/</span></li>
<li class="active ">Installation Procedures FGSMS Agents</li>
<li id="publishDate" class="pull-right">Last Published: 11 Mar 2017</li>
</ul>
</div>
<div class="row-fluid">
<div id="leftColumn" class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li><a href="index.html" title="Project Information"><span class="none"></span>Project Information</a> </li>
<li><a href="index2.html" title="Welcome"><span class="none"></span>Welcome</a> </li>
<li><a href="whitepaper.html" title="Whitepaper"><span class="none"></span>Whitepaper</a> </li>
<li><a href="architecture.html" title="Architecture"><span class="none"></span>Architecture</a> </li>
<li><a href="quickstart.html" title="Quick Start"><span class="none"></span>Quick Start</a> </li>
<li><a href="deployment-planning.html" title="Deployment Planning"><span class="none"></span>Deployment Planning</a> </li>
<li><a href="deployserver.html" title="Deploying the Server"><span class="none"></span>Deploying the Server</a> </li>
<li><a href="agentmatrix.html" title="Agent Matrix"><span class="none"></span>Agent Matrix</a> </li>
<li class="active"><a href="#"><span class="none"></span>Deploying Agents</a>
</li>
<li><a href="user.html" title="User Guide"><span class="none"></span>User Guide</a> </li>
<li><a href="reporting.html" title="Reports and data access"><span class="none"></span>Reports and data access</a> </li>
<li><a href="security.html" title="Security Guide"><span class="none"></span>Security Guide</a> </li>
<li><a href="permissions.html" title="Access Control"><span class="none"></span>Access Control</a> </li>
<li><a href="federation.html" title="Data Federation"><span class="none"></span>Data Federation</a> </li>
<li><a href="news.html" title="News"><span class="none"></span>News</a> </li>
<li><a href="sdk.html" title="SDK"><span class="none"></span>SDK</a> </li>
<li><a href="specs.html" title="Specs/ICD"><span class="none"></span>Specs/ICD</a> </li>
<li><a href="committer.html" title="Committers"><span class="none"></span>Committers</a> </li>
<li><a href="faq.html" title="FAQ"><span class="none"></span>FAQ</a> </li>
<li class="nav-header">Modules</li>
<li><a href="apache-tomcat/index.html" title="Pre-Configured Apache Tomcat"><span class="none"></span>Pre-Configured Apache Tomcat</a> </li>
<li><a href="apache-juddi/index.html" title="Pre-Configured Apache Juddi"><span class="none"></span>Pre-Configured Apache Juddi</a> </li>
<li><a href="fgsms-common-interfaces/index.html" title="fgsms Interfaces WS Stubs and Schema Bindings Generated from WSDL"><span class="none"></span>fgsms Interfaces WS Stubs and Schema Bindings Generated from WSDL</a> </li>
<li><a href="fgsms-common/index.html" title="fgsms Common"><span class="none"></span>fgsms Common</a> </li>
<li><a href="fgsms-agents/index.html" title="fgsms Embedded Agents"><span class="none"></span>fgsms Embedded Agents</a> </li>
<li><a href="fgsms-ws-notification/index.html" title="fgsms WS-Notification Parent"><span class="none"></span>fgsms WS-Notification Parent</a> </li>
<li><a href="fgsms-server/index.html" title="fgsms Server"><span class="none"></span>fgsms Server</a> </li>
<li><a href="fgsms-cli/index.html" title="fgsms Command Line Interface"><span class="none"></span>fgsms Command Line Interface</a> </li>
<li><a href="fgsms-samples/index.html" title="fgsms Examples Packages"><span class="none"></span>fgsms Examples Packages</a> </li>
<li><a href="fgsms-dist/index.html" title="fgsms Distribution"><span class="none"></span>fgsms Distribution</a> </li>
<li><a href="fgsms-netagent/index.html" title="fgsms.Net Components"><span class="none"></span>fgsms.Net Components</a> </li>
<li class="nav-header">Project Documentation</li>
<li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a> </li>
<li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a> </li>
</ul>
<form id="search-form" action="https://www.google.com/search" method="get" >
<input value="https://mil-oss.github.io/" name="sitesearch" type="hidden"/>
<input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</div>
</div>
</div>
<div id="bodyColumn" class="span10" >
<h1>Installation Procedures FGSMS Agents</h1>
<p>Note: this article is dated and needs many updates.</p>
<p>We’re currently working on an automagical installation wizard to automate most of the stuff in this article. The info here is mostly useful as a a reference guide.</p>
<h1>Java Web Service Agents</h1>
<p>Agents are broken into both CLIENT and SERVICE agents. Only configure the agent that is needed to monitor a specific service. Client and service agents may be combined. Currently the behavior is that each time a message is witnessed, it will be recorded by each agent.</p>
<h1>Java Agents</h1>
<p>From the distribution package, locate the agents folder. Edit the file in fgsms-agent.properties Modify the required settings Save and close the file</p>
<div class="section">
<h2><a name="Configuration_Parameters"></a>Configuration Parameters</h2>
<p>For the latest documentation view the inline comments within the example fgsms-agent.properties within FGSMS.AgentCore.jar.</p>
<p>This section is for Java based FGSMS Web Service (Transactional) Agents only.</p>
<table border="0" class="table table-striped">
<thead>
<tr class="a">
<th>Property </th>
<th>Values </th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="b">
<td>FGSMS.AuthMode </td>
<td>None, PKI, UsernamePassword </td>
<td>The authentication mode to the fgsms server.</td>
</tr>
<tr class="a">
<td>FGSMS.AuthMode.Username </td>
<td>string</td>
</tr>
<tr class="b">
<td>FGSMS.AuthMode.Password </td>
<td>string </td>
<td>Encrypted password. It can be encrypted with <tt>java -jar fgsms.Common-XXX-with-dependencies.jar</tt></td>
</tr>
<tr class="a">
<td>FGSMS.AuthMode.PKICert </td>
<td>Not yet implemented</td>
</tr>
<tr class="b">
<td>message.processor.ignoreList </td>
<td>string|string|…. </td>
<td>delimited URLs to be ignored delimited by the pipe symbol</td>
</tr>
<tr class="a">
<td>datacollectorservice.URL </td>
<td>url1|url2|…. Execution URL to an instance of FGSMS DCS Service. Multiple values delimited by |</td>
</tr>
<tr class="b">
<td>datacollectorservice.algorithm </td>
<td>fallback, roundrobin </td>
<td>“Fallback = try the URLs in order until one works. Roundrobin = iteratively loop through the list, distributing the load evenly. If one fails, try the next one until we succeed.”</td>
</tr>
<tr class="a">
<td>datacollectorservice.retry >= 0</td>
</tr>
<tr class="b">
<td>policyconfigurationservice.URL </td>
<td>url1|url2|…. </td>
<td>Execution URL to an instance of FGSMS PCS Service. Multiple values delimited by |</td>
</tr>
<tr class="a">
<td>policyconfigurationservice.algorithm </td>
<td>fallback, roundrobin </td>
<td>“Fallback = try the URLs in order until one works. Roundrobin = iteratively loop through the list, distributing the load evenly. If one fails, try the next one until we succeed.”</td>
</tr>
<tr class="b">
<td>policyconfigurationservice.retry </td>
<td>>= 0</td>
</tr>
<tr class="a">
<td>discovery.interval </td>
<td>30000 </td>
<td>if enabled, a list of URLs will be periodically loaded and dynamically ADDED to the list of above for each service. Time in milliseconds</td>
</tr>
<tr class="b">
<td>discovery.uddi.enabled </td>
<td>True/false</td>
</tr>
<tr class="a">
<td>discovery.uddi.inquiry.url </td>
<td>Optional, execution URL, overrides the WSDL location.</td>
</tr>
<tr class="b">
<td>discovery.uddi.inquiry.authrequired </td>
<td>true/false </td>
<td>Some UDDI servers allow for anonymous Inquires.</td>
</tr>
<tr class="a">
<td>discovery.uddi.inquiry.authmode </td>
<td>http or uddi </td>
<td>“UDDI = Use the security endpoint for authentication. HTTP = Use HTTP style authentication”</td>
</tr>
<tr class="b">
<td>discovery.uddi.security.url </td>
<td>Optional, execution URL, overrides the WSDL location.</td>
</tr>
<tr class="a">
<td>discovery.uddi.security.username </td>
<td>string </td>
</tr>
<tr class="b">
<td>discovery.uddi.security.password </td>
<td>Encrypted password </td>
</tr>
<tr class="a">
<td>discovery.uddi.lookup.findType </td>
<td>EndpointBindingKey, EndpointKeyWord, BusinessService </td>
<td>“EndpointBindingKey, loads from a BindingTemplate Key, this must be the unique identifier for the binding template containing 0 or more endpoints. EndpointKeyWord , attempts to find services by name, aka the display name. ServiceEntityKey loads from a BusinessService key, this must be the unique identifier for the business service containing 0 or more binding templates with 0 or more endpoints”</td>
</tr>
<tr class="b">
<td>discovery.uddi.lookup.dcs.servicename </td>
<td>string </td>
<td>Based on the findType, the value that we are looking for, see above.</td>
</tr>
<tr class="a">
<td>discovery.uddi.lookup.pcs.servicename </td>
<td>string </td>
<td>Based on the findType, the value that we are looking for, see above.</td>
</tr>
<tr class="b">
<td>message.processor.dead.message.queue.duration </td>
<td>number >= 10000 </td>
<td>Default = 600000“ Time in ms in which a message is declared dead. This occurs when an request comes in, but a response is not returned | agent.dependencyinjection.enabled | true/false | Enables/Disables the insertion of headers into messages to track and correlate service chaining events. | agent.unavailablebehavior | PURGE, HOLD, HOLDPERSIST | ”PURGE= purge the queues and drop all messages until PCS/DCS is available, then resume normal operations. HOLD= hang on to the data until PCS/DCS is available again, if this container goes down, data still in the queue will be lost. HOLDPERSIST = hang on to the data until PCS/DCS is available again, if this container goes down, data will be stored in a temp file"</td>
</tr>
<tr class="a">
<td>agent.offlinestorage </td>
<td>[path] </td>
<td>Used as the Persistent storage location for metrics/message logs.</td>
</tr>
</tbody>
</table></div>
<div class="section">
<h2><a name="Adding_the_Agent_to_your_Java_classpath"></a>Adding the Agent to your Java classpath</h2>
<p>If you happen to have the source code to the component you’re monitoring and you’re using maven or gradle to build the system, then you just simply need to the appropriate agent as a dependency, add your config file and go.</p>
<p>From the distribution zip, you’ll need fgsms.AgentCore-(version)-with-dependencies.jar and one of the following jars that are specific to your application.</p></div>
<div class="section">
<h2><a name="JbossWS_JAX-WS_Service_AgentFGSMS.JbossWSJAXWSAgent.jar"></a>JbossWS JAX-WS Service Agent(FGSMS.JbossWSJAXWSAgent.jar)</h2>
<p>The installation of JbossWS agents depends on what version of JbossWS you are using. By default Jboss AS 4.2.3 comes with JbossWS-Native 2.0, which is incompatible with FGSMS. JbossWS Native 3.1.1 should be used instead. If using JbossWS Native 3.1.1, things are much easier as it supports a global standard-endpoint-config.xml file. This file is located within the jbossws.sar/META-INF folder.</p>
<p>Later versions of Jboss AS use JbossWS variants which do NOT support globally defined handlers within jbossws.sar. In this case, start with the default standard-endpoint-config.xml, add the FGSMS values below, and then copy the standard-endpoint-config.xml file into the /META-INF folder of each service to needs to be monitored.</p>
<p>Edit the file within server\default\deploy\jbossws.sar\META-INF\standard-jaxws-endpoint-config.xml</p>
<p>Add the remarked sections below to the standard-endpoint-config.xml file.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"> <endpoint-config>
<config-name>Standard Endpoint</config-name>
<pre-handler-chains>
<javaee:handler-chain>
<javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
<!-- insert FGSMS handler here -->
<javaee:handler>
<javaee:handler-name>FGSMS Agent</javaee:handler-name>
<javaee:handler-class>org.miloss.fgsms.agents.JbossWSMonitor</javaee:handler-class>
</javaee:handler>
<!-- insert FGSMS handler here -->
</javaee:handler-chain>
</pre-handler-chains>
</endpoint-config>
</pre></div></div>
<p>Restart Jboss and perform some action that calls a web service within the container. You should see some output in the standard Jboss server.log related to FGSMS. Only services based on JAX-WS using the default class loader will be monitored. Any web application that uses another class loader or has JbossWS embedded into the WAR or EAR file will not automatically be monitored. Follow the same procedure as above to monitor them.</p></div>
<div class="section">
<h2><a name="JbossWS_JAX-WS_Client_AgentFGSMS.JbossWSJAXWSAgent.jar"></a>JbossWS JAX-WS Client Agent(FGSMS.JbossWSJAXWSAgent.jar)</h2>
<p>The installation of JbossWS agents depends on what version of JbossWS you are using. By default Jboss AS 4 comes with JbossWS-Native 2.0, which is incompatible with FGSMS. JbossWS Native 3.1.1 should be used instead. If using JbossWS Native 3.1.1, things are much easier as it supports a global standard-endpoint-config.xml file. This file is located within the jbossws.sar/META-INF folder.</p>
<p>Later version of Jboss AS use different variants which do NOT support globally defined handlers. In this instance, start with the default file, add the FGSMS values, and copy the standard-endpoint-config.xml file into the /META-INF folder of the service to monitored.</p>
<p>Edit the file within server\default\deploy\jbossws.sar\META-INF\standard-jaxws-client-config.xml</p>
<p>Add the remarked sections below to the standard-client-config.xml file.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"> <client-config>
<config-name>Standard Client</config-name>
<post-handler-chains>
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-name>FGSMS Handler</javaee:handler-name>
<javaee:handler-class>org.miloss.fgsms.agents.JbossWSClientAgent</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</post-handler-chains>
<feature>http://org.jboss.ws/dispatch/validate</feature>
</client-config>
</pre></div></div>
<p>Restart Jboss and perform some action that calls a web service within the container. You should see some output in the standard Jboss server.log related to FGSMS. Only services based on JAX-WS using the default class loader will be monitored. Any web application that uses another class loader or has JbossWS embedded into the WAR or EAR file will not automatically be monitored. Follow the same procedure as above to monitor them.</p></div>
<div class="section">
<h2><a name="Axis_1.3_Client_and_Service_Agent_FGSMS.Axis1xAgent.jar"></a>Axis 1.3+ Client and Service Agent (FGSMS.Axis1xAgent.jar)</h2>
<p>Copy the following files into the server/default/lib folder</p>
<p>Modify the web application containing the service that you wish to monitor server/default/deploy/warfile.war/ WEB-INF/server-config.wsdd to include the following</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><requestFlow>
<handler name="FGSM" type="java:org.miloss.fgsms.agents.Axis1MonitorInbound">
</handler>
</requestFlow>
<responseFlow>
<handler name="FGSM" type="java:org.miloss.fgsms.agents.Axis1MonitorOutbound">
</handler>
</responseFlow>
</pre></div></div>
<p>As an additional dependency, the JbossWS framework or some other kind of JAXWS framework should also be present within this container/deployment. You may have to experiment depending on the version of Jboss in use.</p></div>
<div class="section">
<h2><a name="Axis_2.x_Metro_Apache_CXF_FGSMS.GenericJAXWSAgent.jar"></a>Axis 2.x, Metro, Apache CXF (FGSMS.GenericJAXWSAgent.jar)</h2>
<p>Axis 2.x is based on JAX-WS, therefore the same files and procedures hold true for JbossWS JAX-WS. The only difference is that standard-jaxws-endpoint-config.xml is NOT modified, only the server-config.wsdd is modified to include the class org.miloss.fgsms.agent.JAXWSGenericAgent (for services) and org.miloss.fgsms.agent.JAXWSGenericClientAgent (for clients) into the handler chain.</p>
<p>Metro: Within Jboss and the use of JbossWS, use the JbossWS handler, otherwise use the JAXWS Generic Agent classpath within the sun-jaxws.xml config file.</p>
<p>The correct classpath is Service: org.miloss.fgsms.agents.JAXWSGenericAgent Client: org.miloss.fgsms.agents.JAXWSGenericClientAgent The following is an example taken from jUDDI. The parts in bold font are the changes.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><bean id="FGSM" class="org.miloss.fgsms.agents.JAXWSGenericAgent" />
<jaxws:endpoint id="inquiry" implementor="org.apache.juddi.api.impl.UDDIInquiryImpl" address="/inquiry">
<jaxws:properties>
<entry key="schema-validation-enabled" value="true"/>
</jaxws:properties>
<jaxws:handlers>
<ref bean="FGSM" />
</jaxws:handlers>
</jaxws:endpoint>
</pre></div></div></div>
<div class="section">
<h2><a name="Apache_CXF_Interceptors_FGSMS.ApacheCXFAgent.jar"></a>Apache CXF Interceptors (FGSMS.ApacheCXFAgent.jar)</h2>
<p>Edit beans.xml or cxf.xml and modify as necessary. The correct classpaths are</p>
<ul>
<li>org.miloss.fgsms.agents.CXFInterceptorOutClient</li>
<li>org.miloss.fgsms.agents.CXFInterceptorInClient</li>
<li>org.miloss.fgsms.agents.CXFInterceptorOutService</li>
<li>org.miloss.fgsms.agents.CXFInterceptorInService</li>
</ul></div>
<div class="section">
<h2><a name="JbossESB_FGSMS.JbossESBAgent.jar"></a>JbossESB (FGSMS.JbossESBAgent.jar)</h2>
<p>JbossESB allowed you to offer a while range of protocols and functionality within the ESB via a series of Action Pipeline Processors. These are defined within each .esb file within the jboss-esb.xml file. </p>
<p>The JbossESB FGSMS Action classes will enable the monitoring of a SOAP messages (and other stuff) that was sent to an ESB endpoint by inserting ActionPipeLineProcessor classes into the action chain. This can also be used to gauge the performance pretty much any ESB deployment, so long as a unique URL can be determined for that specific ESB deployment. </p>
<p>Copy the previously mention files into the <tt>server/default/lib</tt> folder along with FGSMS.JbossESBAgent.jar </p>
<p>Edit the <tt>jboss-esb.xml</tt> file within the ESB deployment to be monitored. Unfortunately this has to done on a per deployment basis and can’t be deployed globally.</p>
<p>Insert the following before and after the proxied service is executed</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"> <action name="FGSMBefore"
class="org.miloss.fgsms.agents.JbossESBProxyAction">
<property name="http_port" value="8080" />
<property name="https_port" value="7443" />
</action>
<!-- do something here
<action name="proxy"> snip </action>
-->
<!--
insert the following after the proxied service is executed. -->
<action name="FGSMAfter" class="org.miloss.fgsms.agents.JbossESBProxyAfterAction">
<property name="http_port" value="8080" />
<property name="https_port" value="7443" />
</action>
</pre></div></div>
<p>The action attribute <tt>name</tt> is arbitrary but must be unique to each ESB deployment Fill out the property <tt>http(s)_port</tt> with ports that match the listening ports of your JbossESB container. JbossESB unfortunately doesn’t offer a way to get the port information of the original inbound request, so we esscentially fabricate one on the fly. This is required so that A) The Bueller process can ping your endpoint and B) that the FGSMS web interface correctly displays the location of this deployment.</p>
<p>Restart Jboss and test. Upon the execution of something in JbossESB, logging output should be visible in the Jboss server.log file and once the service has been executed at least once, the endpoint should be listed within FGSM’s Web GUI.</p></div>
<div class="section">
<h2><a name="Monitoring_Servlet_Based_Services_FGSMS.ServletFilterAgent.jar"></a>Monitoring Servlet Based Services (FGSMS.ServletFilterAgent.jar)</h2>
<p>In certain scenarios, web services can be implemented without using JAXWS and thus they cannot be monitored using web service handlers. If the service is implemented as a J2EE Servlet (3.0 spec or higher), then the FGSMS Servlet Filter can be used. </p>
<p>This is deployed by: Add the standard agent jar files along with FGSMS.ServletFilterAgent.jar within the classpath of the item that you wish to monitor. Modify the web.xml of the web application you wish to monitor. Use the following example to configure.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><filter>
<filter-name>FGSMFilter</filter-name>
<filter-class>org.miloss.fgsms.agents.HttpServletAgent</filter-class>
</filter>
<filter-mapping>
<filter-name>FGSMFilter</filter-name>
<url-pattern>/hw</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>MyWebService</servlet-name>
<servlet-class>namespace.webservice.no2.HelloWorldPortImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> MyWebService </servlet-name>
<url-pattern>/hw</url-pattern>
</servlet-mapping>
</pre></div></div>
<p>The highlighted portions are used to trigger the filter when a request comes into the servlet “MyWebService”.</p>
<p>There are limitations of the Servlet Filter Agent, primarily, it cannot record request and response messages.</p></div>
<div class="section">
<h2><a name="Monitoring_JAX-WS_EJB_Services_with_JbossWS_3.4_or_higher"></a>Monitoring JAX-WS EJB Services with JbossWS 3.4 or higher</h2>
<p>JbossWS 3.4 or higher does not come with any predefined configuration for clients or services that are found in older versions as <tt>“Standard-jaxws-client-config.xml”</tt> and <tt>“standard-jaxws-endpoint-config.xml”</tt>. In older versions, these can be located within the path /server/default/deploy/jbossws.sar/META-INF file and can be used to set globally included handlers. You can copy those files into the above mentioned path.</p>
<p>For JbossWS 3.4, these files can also be created (a sample is included within the deployment package (in the \xml folder) for FGSM) in <tt>/server/default/deployers/jbossws.deployer/META-INF</tt></p>
<p>In case this doesn’t work, the following are some alternative methods to monitor services.</p></div>
<div class="section">
<h2><a name="JbossWS-Native"></a>JbossWS-Native</h2>
<p>Within the service to be monitored deployment file (usually a .jar or .war file) there typically is a META-INF folder. If it does not exist, create it and then create a new file within it called standard-jaxws-endpoint-config.xml with the following text.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jaxws-config:2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="urn:jboss:jaxws-config:2.0 schema/jaxws-config_2_0.xsd">
<endpoint-config>
<config-name>Standard Endpoint</config-name>
<pre-handler-chains>
<javaee:handler-chain>
<javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
<javaee:handler>
<javaee:handler-name>FGSMS Agent JbossWSMonitor</javaee:handler-name>
<javaee:handler-class>org.miloss.fgsms.agents.JbossWSMonitor</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</pre-handler-chains>
</endpoint-config>
</jaxws-config>
</pre></div></div></div>
<div class="section">
<h2><a name="JbossWS-CXF"></a>JbossWS-CXF</h2>
<p>Within the service to be monitored deployment file (usually a .jar or .war file) there typically is a META-INF folder. If it does not exist, create it and then create a new file within it called <tt>jbossws-cxf.xml</tt>. Use the following text as a template. The highlighted portions must be updated to match your operational needs.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns='http://www.springframework.org/schema/beans'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:beans='http://www.springframework.org/schema/beans'
xmlns:jaxws='http://cxf.apache.org/jaxws'
xsi:schemaLocation='http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd'>
<bean id="FGSMhandler" class="org.miloss.fgsms.agents.JbossWSMonitor" />
<!-- one or more jaxws:endpoint EJB3 declarations -->
<jaxws:endpoint
id='DAS'
address="http://localhost:8280/DAS/dataAccessService/DAS"
implementor='org.miloss.fgsms.services.DAS4j.DAS4jBean'>
<jaxws:handlers>
<ref bean="FGSMhandler"/>
</jaxws:handlers>
<jaxws:invoker>
<bean class='org.jboss.wsf.stack.cxf.InvokerEJB3'/>
</jaxws:invoker>
</jaxws:endpoint>
</beans>
</pre></div></div>
<h1>.NET Web Service Agents</h1></div>
<div class="section">
<h2><a name="WCF_Client_and_Service_Agent"></a>WCF Client and Service Agent</h2>
<p>Run the included FGSMS.NETInstaller.exe from the distribution package and follow the included instructions. This will setup your machine to monitor all .NET ASP.NET and WCF based capabilities. </p>
<div class="source">
<div class="source"><pre class="prettyprint linenums">FGSMS.NETInstaller.exe installWebServiceAgentsLibraries
FGSMS.NETInstaller.exe configure
FGSMS.NETInstaller.exe applyConfiguration
FGSMS.NETInstaller.exe addWcfExtensions
FGSMS.NETInstaller.exe enableWcfServiceMonitor
FGSMS.NETInstaller.exe enableWcfClientMonitor
</pre></div></div>
<p>The following table provides descriptions for all of the possible settings.</p>
<p>This section is for .NET based FGSMS Web Service (Transactional) Agents only.</p>
<table border="0" class="table table-striped">
<thead>
<tr class="a">
<th>Property </th>
<th>Values </th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="b">
<td>FGSMS.DCS.URL </td>
<td>url1|url2| </td>
<td>Execution URL to an instance of FGSMS DCS Service. Multiple values delimited by |</td>
</tr>
<tr class="a">
<td>FGSMS.PCS.URL </td>
<td>url1|url2| </td>
<td>Execution URL to an instance of FGSMS PCS Service. Multiple values delimited by |</td>
</tr>
<tr class="b">
<td>FGSMS.SS.URL </td>
<td>url1|url2| </td>
<td>Execution URL to an instance of FGSMS SS Service. Multiple values delimited by |</td>
</tr>
<tr class="a">
<td>FGSMS.IgnoreList </td>
<td>string|string| </td>
<td>delimited URLs to be ignored</td>
</tr>
<tr class="b">
<td>FGSMS.message.processor.dead.message.queue.duration </td>
<td>>=10000 </td>
<td>time in milliseconds</td>
</tr>
<tr class="a">
<td>FGSMS.AgentAuthMode </td>
<td>None, usernamePassword, PKI </td>
</tr>
<tr class="b">
<td>FGSMS.AgentAuthModeUsername </td>
<td>string</td>
</tr>
<tr class="a">
<td>FGSMS.AgentAuthModePassword </td>
<td>Encrypted password</td>
</tr>
<tr class="b">
<td>FGSMS.agent.dependencyinjection.enabled </td>
<td>true/false </td>
<td>Enables/Disables the insertion of headers into messages to track and correlate service chaining events.</td>
</tr>
<tr class="a">
<td>FGSMS.agent.unavailablebehavior </td>
<td>PURGE, HOLD, HOLDPERSIST </td>
<td>PURGE= purge the queues and drop all messages until PCS/DCS is available, then resume normal operations</td>
</tr>
<tr class="b">
<td>FGSMS.agent.persistlocation </td>
<td>Path to a writeable folder</td>
</tr>
<tr class="a">
<td>FGSMS.policyconfigurationservice.algorithm </td>
<td>FALLBACK, ROUNDROBIN </td>
<td>Fallback = try the URLs in order until one works. Roundrobin = iteratively loop through the list, distributing the load evenly. If one fails, try the next one until we succeed.</td>
</tr>
<tr class="b">
<td>FGSMS.policyconfigurationservice.retry </td>
<td>number >= 0</td>
</tr>
<tr class="a">
<td>FGSMS.datacollectorservice.algorithm </td>
<td>FALLBACK, ROUNDROBIN </td>
<td>Fallback = try the URLs in order until one works. Roundrobin = iteratively loop through the list, distributing the load evenly. If one fails, try the next one until we succeed.</td>
</tr>
<tr class="b">
<td>FGSMS.datacollectorservice.retry </td>
<td>number >= 0</td>
</tr>
<tr class="a">
<td>FGSMS.discovery.interval </td>
<td>30000 </td>
<td>if enabled, a list of URLs will be periodically loaded and dynamically ADDED to the list of above for each service</td>
</tr>
<tr class="b">
<td>FGSMS.discovery.uddi.enabled </td>
<td>true/false</td>
</tr>
<tr class="a">
<td>FGSMS.discovery.uddi.inquiry.url </td>
<td>Execution URL of UDDI Inquiry</td>
</tr>
<tr class="b">
<td>FGSMS.discovery.uddi.inquiry.authrequired </td>
<td>true/false</td>
</tr>
<tr class="a">
<td>FGSMS.discovery.uddi.security.url </td>
<td>Execution URL of Security Inquiry</td>
</tr>
<tr class="b">
<td>FGSMS.discovery.uddi.security.username </td>
<td>string</td>
</tr>
<tr class="a">
<td>FGSMS.discovery.uddi.security.password </td>
<td>Encrypted password</td>
</tr>
<tr class="b">
<td>FGSMS.discovery.uddi.lookup.findType </td>
<td>EndpointBindingKey, EndpointKeyWord, ServiceEntityKey </td>
<td>EndpointBindingKey, loads from a BindingTemplate Key, this must be the unique identifier for the binding template containing 0 or more endpoints. EndpointKeyWord, attempts to find services by name, aka the display name. ServiceEntityKey loads from a BusinessService key, this must be the unique identifier for the business service containing 0 or more binding templates with 0 or more endpoints.</td>
</tr>
<tr class="a">
<td>FGSMS.discovery.uddi.lookup.dcs </td>
<td>string </td>
<td>Based on the findType, the value that we are looking for, see above.</td>
</tr>
<tr class="b">
<td>FGSMS.discovery.uddi.lookup.pcs </td>
<td>string </td>
<td>Based on the findType, the value that we are looking for, see above.</td>
</tr>
</tbody>
</table>
<p><b>Customization Note:</b> In certain scenarios, some products or capabilities are very chatty, meaning that they execute or poll a web service very frequently. This can cause additional traffic, bandwidth and latency within your network. If you encounter this, add the offending service’s URL to the IgnoreList (.NET only).</p></div>
<div class="section">
<h2><a name="Monitoring_a_specific_WCF_service_or_WCF_Client"></a>Monitoring a specific WCF service or WCF Client</h2>
<p>Perform the following commands using the FGSMS .NET Installer</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums">FGSMS.NETInstaller.exe installWebServiceAgentsLibraries
FGSMS.NETInstaller.exe configure
FGSMS.NETInstaller.exe applyConfiguration
FGSMS.NETInstaller.exe addWcfExtensions
</pre></div></div>
<p>Locate and merge the following settings. Consult the .NET configuration information at Microsoft’s MSDN web site for further guidance.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><system.serviceModel>
<behaviors>
<endpointBehaviors> <!-- for calling a service -->
<behavior name="clientbehavior1">
<FGSMS.ClientAgent/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="servicebehavior1">
<FGSMS.ServiceAgent/> <!-- for when this service is called -->
</behavior>
</serviceBehaviors>
</behaviors >
</pre></div></div>
<p>This service should now be monitored.</p></div>
<div class="section">
<h2><a name="ASP.NET_Agents"></a>ASP.NET Agents</h2>
<p>To monitor all ASP.NET services and clients on a given machine Use the FGSMS.NET Installer</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums">FGSMS.NETInstaller.exe installWebServiceAgentsLibraries
FGSMS.NETInstaller.exe configure
FGSMS.NETInstaller.exe applyConfiguration
FGSMS.NETInstaller.exe enableASPMonitor
</pre></div></div>
<p>To monitor a specific ASP.NET service or client on a given machine.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums">FGSMS.NETInstaller.exe installWebServiceAgentsLibraries
FGSMS.NETInstaller.exe configure
FGSMS.NETInstaller.exe applyConfiguration
</pre></div></div>
<p>Modify the app.config or web.config file.</p>
<p>Locate the following section, it may not exist and you may have to add it.</p>
<div class="source">
<div class="source"><pre class="prettyprint linenums"><system.web>
<webServices>
<soapExtensionTypes>
Add the following item:
<add type="FGSMS.Agent.AgentSoapExtension, FGSMS.NETAgent, Version=1.0.0.0, Culture=neutral, PublicKeyToken= e81ab410f7d48538" priority="1" group="High"/>
</soapExtensionTypes>
</webServices>
</pre></div></div></div>
<div class="section">
<h2><a name="Securing_Connection_Details"></a>Securing Connection Details</h2>
<p>Use the included utility “FGSMS.Util.exe” to generate encrypted text of passwords and replace the generated values with those inside of the machine.config files</p>
<p>This uses AES encryption using a 256-bit key.</p></div>
<div class="section">
<h2><a name="a.NET_Persistent_Storage_Agent"></a>.NET Persistent Storage Agent</h2>
<p>The Persistent storage agent is a daemon process that will periodically check a directory for FGSMS agent data. Data is typically only written there when an agent cannot reach the FGSMS server AND it is configured for HOLDPERSIST mode. The Persistent Storage Agent is only required for use with that configuration. Install it using the FGSMS.NET Installer. </p>
<div class="source">
<div class="source"><pre class="prettyprint linenums">FGSMS.NETInstaller.exe installWebServiceAgentsLibraries
FGSMS.NETInstaller.exe configure
FGSMS.NETInstaller.exe applyConfiguration
FGSMS.NETInstaller.exe installPersistentWebServiceAgent
</pre></div></div>
<h1>Operating System Agents</h1>
<p>FGSMS includes some extra agents that are used exclusively for monitoring the status of machines or process.</p>
<p>See the distribution zip\agents\os Before installing or running, modify, if necessary the FGSMS.AgentCore.jar file to update URLs, usernames and passwords.</p>
<p>For Windows users, simply click on OSAgentServiceInstall.cmd and it will install and start up right away. OSAgentServiceInstallWithDEBUG.cmd may also be used for verbose logging into the same directory that the agent is located in.</p>
<h1>Statistical Agents (Message Brokers)</h1></div>
<div class="section">
<h2><a name="QpidMRG_AMQP_Message_Broker_Via_Python_Script"></a>Qpid/MRG AMQP Message Broker (Via Python Script)</h2>
<p>Dependencies:</p>
<ul>
<li>Access to the FGSMS Web Services Access to the locally hosted AMQP Qpid/MRG broker C++ Python</li>
</ul>
<p><b>Information Assurance Note:</b> The AMQP Message Broker agent for QPID/MRG uses a python script. Both the Java process that runs the agent and the python script must have sufficient user privileges on the system to execute.</p>
<p>Before installing or running, modify, if necessary the FGSMS.AgentCore.jar file to update URLs, usernames and passwords.</p>
<p>Execution instructions: <tt>java –jar FGSMS.QpidPyAgent.jar</tt></p>
<p>See the included README.txt for more information.</p>
<h1>All Other Agents</h1>
<p>All other agents run on the FGSMS server and connect remotely to the component or capability. These agents are configured via the Web GUI at <a class="externalLink" href="http://localhost:8888/fgsmsBootstrap">http://localhost:8888/fgsmsBootstrap</a>.</p>
<h1>Using Active Directory to remotely install FGSMS Agents</h1>
<p>Microsoft’s Active Directory can be used to install the following types of FGSMS Agents:</p>
<ul>
<li>.NET Web Service Agents (WCF, ASP.NET)</li>
<li>.NET Web Service Persistent Storage</li>
<li>Java Web Service Persistent Storage</li>
<li>OS Agent</li>
</ul>
<p>Note: Java Web Service agents cannot be deployed using this mechanism.</p>
<p>This is a multistep procedure that will use a Group Policy Object (GPO) to create a Software Installation Policy that will deploy the above agents. Additional steps are required. Do not just install the MSI file without reading the directions first.</p></div>
<div class="section">
<h2><a name="Overview_of_the_installation"></a>Overview of the installation</h2>
<ol style="list-style-type: decimal">
<li>Create an OU</li>
<li>Create a GPO</li>
<li>Define the Software Installation Policy</li>
<li>Define/customize a Windows Start Up Script to push the configuration</li>
<li>Add computers to the OU</li>
<li>Restart the computer (or use some other means to force the script to run)</li>
</ol>
<div class="section">
<h3><a name="Create_an_Organizational_Unit"></a>Create an Organizational Unit</h3>
<p>This step will create an Active Directory Organizational Unit to use a logical container for machines that you want to monitor. All machines within the OU will have the agents remotely installed to it.</p>
<p>TODO Pictures</p></div>
<div class="section">
<h3><a name="Create_a_Group_Policy_Object"></a>Create a Group Policy Object</h3>
<p>This step will create and assign a GPO that affects computers in the Organization Unit</p></div>
<div class="section">
<h3><a name="Define_the_Software_Installation_Policy"></a>Define the Software Installation Policy</h3>
<p>This will cause Windows to force the install of FGSM’s agents at start up time.</p>
<p>Navigate to Computer Configuration > Software Installation</p></div>
<div class="section">
<h3><a name="Definecustomize_a_Windows_Start_Up_Script_to_push_the_configuration"></a>Define/customize a Windows Start Up Script to push the configuration</h3>
<p>Navigate to Computer Configuration > Windows Settings > Scripts (Startup/Shutdown)</p>
<p>Click Add. Name it “FGSMS configuration push”. This is arbitrary. Select the script from the FGSMS distribution package in /scripts/ updateConfigStartUpScript.bat</p>
<p>This file needs to be modified to match your environment. See inline documentation within the batch file for details.</p></div>
<div class="section">
<h3><a name="Add_Computers_to_the_Organization_Unit"></a>Add Computers to the Organization Unit</h3>
<p>The next step is to add computers to the Organization Unit. This can be done by dragging computer’s into the new OU.</p></div>
<div class="section">
<h3><a name="Restart_the_computers"></a>Restart the computer(s)</h3>
<p>The machine now needs to be restarted. This can be performed in mass using the following command from windows. Start > Run > shutdown /i Administrative Credentials are required.</p></div>
<div class="section">
<h3><a name="DisablingRemoving_FGSMS_Agents"></a>Disabling/Removing FGSMS Agents</h3>
<p>There are a few different options Go to each machine that FGSMS was installed to, open Add/Remove Programs and uninstall FGSM. Remove the Software Installation Policy from Active Directory, selecting Remove Software when prompted. Disable FGSMS Agents using a script, such as net stop <tt><service name></tt> Manual Uninstall. Use this when all else fails</p></div></div>
</div>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
</div>
</div>
</footer>
</body>
</html>