What is Server side analytics ?

WebSphere Portal implements a logging function for your usage data. The portal writes usage records to a dedicated log file if site analysis logging is enabled. Multiple types of site analyzer loggers allow portal administrators to collect statistical data in various areas. The portal server manages the collection of data on its own, but from a business point of view you can also log custom details of business events.
The portal configuration service, SiteAnalyzerLogService, determines the type of site analysis data that the portal logs at run time. Depending on the service configuration, the portal logs the following events:

  • Page management, such as creating, reading, updating, deleting pages.

  • Requests of pages by users.

  • Requests of portlets by users.

  • Session activities, such as login, logout, time out, login failed.

  • User management actions, such as creating, reading, updating, and deleting users and groups.



The resulting log entries comply with the NCSA(Log format used by HTTP Server) Combined industry standard. By analyzing the log entries, you can monitor applications running on your portal site.

Once the Server side analytics is enabled every time user goes to a a portal page, portal will write one or more entries to the log file. It will write one entry for the page and one entry for each portlet on the page.

I have a portal page with name equal to Site_Analytics and that page has only one portlet Site_Analytics_portlet on it. These are the entries that get generated in the site analytics log file when i go to the Site_Analytics page.

localhost.localdomain - wasadmin [08/Sep/2010:07:29:55 -0700] "GET /Page/Z6_OGFLMKG108IGF0IANFDTU130G6/Site_Analytics HTTP/1.1" 200 -1 "" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" "portalOpenFlyout=;LtpaToken2=8iow+eV5jr4tY37uwNk17oI4eRj4Cnagg0KYwv/wTMTYPW542e60q1CKgoA5f1ACTlJxdOk7FRTVZt9J7AmXBRRcJLTTwA3Il+yTvabu1m7n6Ujs06LpGZD41f4YOxPW2mdIrMvm/qLDFHlPi1aDcX1beM34IEExVFFQjo53wnC+OiE5SOwGrOxrSSGuIwpUVMXRL7ROJT47yDdppr3tvcyrr5E5TarKw/qmkLQayfhrPZTvNf6FkgqtV/sDtqxckV5wi5mgDcdXMT6Bixzb7nEHVjyhZg6sWu523UZ2vwlbA/n0jqiyfDythfIdGbtpVhk6jEAGspU6L6ll4kj5yZsFltNe+Gx7ELsOILqx4AucUQsH3frSsgr3YvwRqaPZiDBsiJ1+zpHMkyOkIBM/gW2QvvGEvO9IUd5f20dqhUctbdi+sKPnWnHxkABWP7r15y5pVfFGijFuNUM9uvAEcZ1tr/tRq4C43iHCE/pUj20h3eE3ZYRVrNTxSzJd+tC9jssW4Vx/pLye7T2HDe5burHk/QavV6pTw5o5Xdl7e/1IcoH4n2VZgonqQc4dZm7uwxT4cWRKThoWQbfkOa4FIiZq+zvv2jZFOBq9dVeJWObVTG1AWLL0peG1XppJ6VY4FVz/MFiLbw6pKMWzHEr5d4x5BtvatV03k0Ri6ouIBeLbw8i7qDObWWsIlA7j36TV;portalFlyoutIsOpen=;JSESSIONID=0000oKrwgT_5eVylkyN1YmaDnEP:-1"
localhost.localdomain - wasadmin [08/Sep/2010:07:29:55 -0700] "GET /Portlet/Z5_OGFLMKG108IGF0IANFDTU13086/Site_Analytics_portlet?PortletPID=Z5_OGFLMKG108IGF0IANFDTU13086&PortletMode=help&PortletState=normal HTTP/1.1" 200 -1 "http://localhost/Page/Z6_OGFLMKG108IGF0IANFDTU130G6/Site_Analytics" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" "portalOpenFlyout=;LtpaToken2=8iow+eV5jr4tY37uwNk17oI4eRj4Cnagg0KYwv/wTMTYPW542e60q1CKgoA5f1ACTlJxdOk7FRTVZt9J7AmXBRRcJLTTwA3Il+yTvabu1m7n6Ujs06LpGZD41f4YOxPW2mdIrMvm/qLDFHlPi1aDcX1beM34IEExVFFQjo53wnC+OiE5SOwGrOxrSSGuIwpUVMXRL7ROJT47yDdppr3tvcyrr5E5TarKw/qmkLQayfhrPZTvNf6FkgqtV/sDtqxckV5wi5mgDcdXMT6Bixzb7nEHVjyhZg6sWu523UZ2vwlbA/n0jqiyfDythfIdGbtpVhk6jEAGspU6L6ll4kj5yZsFltNe+Gx7ELsOILqx4AucUQsH3frSsgr3YvwRqaPZiDBsiJ1+zpHMkyOkIBM/gW2QvvGEvO9IUd5f20dqhUctbdi+sKPnWnHxkABWP7r15y5pVfFGijFuNUM9uvAEcZ1tr/tRq4C43iHCE/pUj20h3eE3ZYRVrNTxSzJd+tC9jssW4Vx/pLye7T2HDe5burHk/QavV6pTw5o5Xdl7e/1IcoH4n2VZgonqQc4dZm7uwxT4cWRKThoWQbfkOa4FIiZq+zvv2jZFOBq9dVeJWObVTG1AWLL0peG1XppJ6VY4FVz/MFiLbw6pKMWzHEr5d4x5BtvatV03k0Ri6ouIBeLbw8i7qDObWWsIlA7j36TV;portalFlyoutIsOpen=;JSESSIONID=0000oKrwgT_5eVylkyN1YmaDnEP:-1"


The WPS server has added two lines to the sa.log file

  1. /Page/Z6_OGFLMKG108IGF0IANFDTU130G6/Site_Analytics: Entry starting with /Page indicates that you access a page, the Z6_OGFLMKG108IGF0IANFDTU130G6 part is objectid of the page, if you take xmlaccess export of the page it will match the objectid of the page. The last part /Site_Analytics is page name that you used while creating the page

  2. /Portlet/Z5_OGFLMKG108IGF0IANFDTU13086/Site_Analytics_portlet?PortletPID=Z5_OGFLMKG108IGF0IANFDTU13086&PortletMode=help&PortletState=normal: Entry starting with /Portlet indicates that this is entry for accessing a portlet. The /Z5_OGFLMKG108IGF0IANFDTU13086 is portlet instance/window id(This is unique to instance of the portlet on a page) and the /Site_Analytics_portlet is value of portlet-name element as defined in the portlet.xml. The PortletPID=Z5_OGFLMKG108IGF0IANFDTU13086 is again the portlet instance or window id. The URL also has the window state and portlet mode as query parameters



This is the xmlaccess export of the page that these log entries got generated for

<request build="wpnext_528_01" type="update" version="7.0.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PortalConfig_7.0.0.xsd">
<portal action="locate">
<web-app action="locate" domain="rel" objectid="Z1_OGFLMKG108IGF0IANFDTU13001" uid="SiteAnalyticsDebugPortlet.war.webmod">
<servlet action="locate" domain="rel" name="Site Analytics portlet" objectid="ZV_OGFLMKG108IGF0IANFDTU13003"/>
<portlet-app action="locate" domain="rel" name="Application Name not available for this Application" objectid="Z2_OGFLMKG108IGF0IANFDTU13005" uid="SiteAnalyticsDebugPortlet.war">
<portlet action="locate" domain="rel" name="Site Analytics portlet" objectid="Z3_OGFLMKG108IGF0IANFDTU13007"/>
</portlet-app>
</web-app>
<content-node action="locate" domain="rel" objectid="Z6_000000000000000000000000A0" uniquename="wps.content.root"/>
<content-node action="locate" domain="rel" objectid="Z6_CGAH47L0085810IAHU76SD20A3" uniquename="ibm.portal.Home"/>
<content-node action="locate" domain="rel" objectid="Z6_OGFLMKG108TNF0IABV62431005"/>
<content-node action="update" active="true" allportletsallowed="true" content-parentref="Z6_OGFLMKG108TNF0IABV62431005" create-type="explicit" domain="rel" objectid="Z6_OGFLMKG108IGF0IANFDTU130G6" ordinal="400" type="staticpage">
<localedata locale="en">
<title>Site Analytics</title>
</localedata>
<pagecontents display-option="inline" markup="html">

</pagecontents>
<parameter name="com.ibm.portal.IgnoreAccessControlInCaches" type="string" update="set"><![CDATA[false]]></parameter>
<parameter name="com.ibm.portal.bookmarkable" type="string" update="set"><![CDATA[Yes]]></parameter>
<parameter name="com.ibm.portal.feed.remote-cache-expiry" type="string" update="set"><![CDATA[86400]]></parameter>
<parameter name="com.ibm.portal.friendly.name" type="string" update="set"><![CDATA[siteanalytics]]></parameter>
<parameter name="com.ibm.portal.layout.template.expiration" type="string" update="set"><![CDATA[1283955717702]]></parameter>
<parameter name="com.ibm.portal.layout.template.file.name.html" type="string" update="set"><![CDATA[layout.html]]></parameter>
<parameter name="com.ibm.portal.layout.template.lastmodified" type="string" update="set"><![CDATA[1283955722969]]></parameter>
<parameter name="com.ibm.portal.layout.template.markup" type="string" update="set"><![CDATA[html]]></parameter>
<parameter name="com.ibm.portal.layout.template.ref" type="string" update="set"><![CDATA[dav:fs-type1/layout-templates/2ColumnEqual/]]></parameter>
<parameter name="com.ibm.portal.remote-cache-expiry" type="string" update="set"><![CDATA[86400]]></parameter>
<parameter name="com.ibm.portal.remote-cache-scope" type="string" update="set"><![CDATA[NON-SHARED]]></parameter>
<parameter name="com.ibm.portal.static.page.file.name.html" type="string" update="set"><![CDATA[layout.html]]></parameter>
<access-control externalized="false" owner="uid=wasadmin,o=defaultWIMFileBasedRealm" private="false"/>
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU130G1" ordinal="100" orientation="V" skinref="undefined" type="container" width="undefined">
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU130G5" ordinal="100" orientation="V" skinref="undefined" type="container" width="undefined"/>
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU130G3" ordinal="200" orientation="H" skinref="undefined" type="container" width="undefined">
<parameter name="com.ibm.portal.layoutnode.localname" type="string" update="set"><![CDATA[ibmHiddenWidgets]]></parameter>
<parameter name="css-classes" type="string" update="set"><![CDATA[ibmDndRow hiddenWidgetsContainer]]></parameter>
</component>
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU130G7" ordinal="300" orientation="H" skinref="undefined" type="container" width="undefined">
<parameter name="com.ibm.portal.layoutnode.localname" type="string" update="set"><![CDATA[ibmMainContainer]]></parameter>
<parameter name="css-classes" type="string" update="set"><![CDATA[ibm2Col ibmDndColumn]]></parameter>
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU13082" ordinal="100" skinref="undefined" type="control" width="undefined">
<portletinstance action="update" domain="rel" objectid="Z5_OGFLMKG108IGF0IANFDTU13086" portletref="Z3_OGFLMKG108IGF0IANFDTU13007"/>
</component>
</component>
<component action="update" active="true" deletable="undefined" domain="rel" modifiable="undefined" objectid="Z7_OGFLMKG108IGF0IANFDTU13080" ordinal="400" orientation="H" skinref="undefined" type="container" width="undefined">
<parameter name="com.ibm.portal.layoutnode.localname" type="string" update="set"><![CDATA[right]]></parameter>
<parameter name="css-classes" type="string" update="set"><![CDATA[ibm2Col ibmRightCol ibmDndColumn]]></parameter>
</component>
</component>
</content-node>
</portal>
<status element="all" result="ok"/>
</request>


Important Notes:

  • Site Analytics log writes the portlet instance id in the log, so if you have multiple instances of same portlet on same page or on different pages, it will write them as separate URL. You can use the value of portlet-name element as defined in the portlet.xml for finding out how many times a particular portlet is called across different pages

  • It does not write logs for processAction() or serveResource() event by default, you will have to use the SiteAnalytics service to log these events manually