the abs's of parameters and thresholds.pdf

40
Page 1 of 40 Susan E. Miller BMCS:CE The ABC’s of Parameters and Thresholds Author Susan E. Miller BMCS:CE BMC Software Business School August 25, 2004

Upload: gits

Post on 24-Nov-2015

6 views

Category:

Documents


1 download

DESCRIPTION

AuthorSusan E. Miller BMCS:CEBMC Software Business SchoolAugust 25, 2004

TRANSCRIPT

  • Page 1 of 40 Susan E. Miller BMCS:CE

    The ABCs of Parameters and Thresholds

    Author

    Susan E. Miller BMCS:CE BMC Software Business School

    August 25, 2004

  • Page 2 of 40 Susan E. Miller BMCS:CE

    Copyright 2004 BMC Software, Inc. or licensors, as an unpublished work. All rights reserved. BMC Software, the BMC Software logos, and all other BMC Software product or

    service names are registered trademarks or trademarks of BMC Software, Inc. BMC Software, the BMC Software logos, and all other BMC Software product or service names are registered trademarks or trademarks of BMC Software, Inc., in the USA and in other select countries. And indicate USA registration or USA trademark. All other logos and product/trade names are registered trademarks or trademarks belonging to their

    respective companies.

    RESTRICTED RIGHTS LEGEND

    U.S. Government Restricted Rights to Computer Software. UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF THE UNITED STATES. Use,

    duplication, or disclosure of any data and computer software by the U.S. Government is subject to restrictions, as applicable, set forth in FAR Section 52.227-14, DFARS 252.227-7013, DFARS 252.227-7014, DFARS 252.227-7015, and DFARS 252.227-7025, as amended from time to time. Contractor/Manufacturer is BMC Software, Inc., 2101 CityWest Blvd.,

    Houston, TX 77042-2827, USA. Any contract notices should be sent to this address.

    Support Support for this document is provided through the BMC Software Developer Connection Web site ONLY and is governed by the BMC SOFTWARE SDK LICENSE AGREEMENT attached to the end of this document. BMC Software Developer Connection Web Site The BMC Software Developer Connection Web Site generally available 24 hours a day, 7 days a week at http://devcon.bmc.com. From this Web site, you can

    n Converse with forum members and developers about BMC Software products n Search the forums for information about BMC Software products n Post questions and answers in forums for BMC Software products n Find and download code examples, documents, utilities, and tools for BMC

    Software Products n Upload and share your code examples, utilities, tools for BMC Software Products

  • Page 3 of 40 Susan E. Miller BMCS:CE

    Contacting BMC Software

    USA and Canada

    In the USA and Canada, you can contact BMC Software by telephone or fax: Telephone (800) 537-1813 (Product Support)

    (713) 918-8800 (Houston metropolitan area) Fax Call Product Support for the fax number of your BMC

    Software product support representative. Email [email protected]

    International

    Outside the USA and Canada, you can contact a BMC Software international

    support center: Asia/Pacific, Africa, Europe, Latin America, and the Middle East

    BMC Software Pte Ltd. #18-02 Millenia Tower

    Singapore 039192 - Telephone: (65) 338 9400 USA - Telephone: (713) 918-8800

    You can also call the BMC Software office in your country, if applicable.

    For a complete list of all BMC Software international offices and subsidiaries, see the BMC Software home page at http://www.bmc.com.

    BMC Software Business School

    To register for training in North America, contact http://www.bmc.com/education or call our toll-free registration line at 800-

    574-4262.

    For private, international training, or Web Based Training, contact the BMC Software office in your area.

  • Page 4 of 40 Susan E. Miller BMCS:CE

    Table of Contents

    Table of Contents........................................................................................................ Error! Bookmark not defined. Setting and Defining Parameter Thresholds .......................................................................................................5 What Happens to the History? ..............................................................................................................................14 Corrupted History......................................................................................................................................................16 Dumping History ........................................................................................................................................................19 Accessing History .......................................................................................................................................................20 Setting Thresholds......................................................................................................................................................20

    Best Practice............................................................................................................................................................26 Setting with Operator Overrides....................................................................................................................29 Using File Overrides ...........................................................................................................................................31 PSL Overrides........................................................................................................................................................32

    Developer Thresholds and the Developer .................................................................................................33 In General......................................................................................................................................................................34

    Authors Disclaimer

    This is not a document published or supported by BMC Software therefore it is considered an, unsupported document. Every, intent, has been made to provide up to date accurate information herein using field expertise and BMC technical reference manuals. This document has not been checked for grammatical accuracy and therefore may contain some grammatical errors.

  • Page 5 of 40 Susan E. Miller BMCS:CE

    Setting and Defining Parameter Thresholds

    Since this document is about defining parameter thresholds, let us start by defining what a parameter does and is. Parameters allow you to gather and display metrics of an application using a PATROL application KM. A typical KM can include any number of parameter scripts that collect various metrics. The program that executes the data collection script for a parameter is called a PSL process. The PSL process is the runtime for the parameter that is created after the application is instantiated. (A parameter becomes active as soon as an applications instance is created. This is true for all of the parameters defined in the application class.) Once the PSL process is created for a parameter, it is moved to the RUNQ of the PATROL job scheduler and is scheduled for immediate execution; thereafter the execution scheduled is based on the poll cycle of the collecting parameter. Thresholds are used to cause a parameter to issue an event. Events inform you that a value collected by the parameter is within a predefined range of values that are not normal. Three rules determine whether a threshold can be set against parameter objects. First the type of parameter must be a consumer or standard parameter, second the parameter value collected must be numeric and last the display type cannot be text.

    Figure 1 - Defining the type of parameter

  • Page 6 of 40 Susan E. Miller BMCS:CE

    Developing a Parameter

    In order that one might entirely understand how to set a threshold it might help to have some general knowledge about parameters, what they are, how they are created and what they do. Parameters are the component of a PATROL application, called a KM that provides the automation. They typically are used to monitor something on a computer or network. This could be any number of things like running processes, files, users, or a piece of hardware. Parameters can also be used to execute any type of automated task. Based on the previous section we know that a parameter is created as part of a KM. A KM file contains the source code for a PATROL application. Within the agent namespace a KM is an application class. When a KM is loaded on an agent, the agent uses the compiler within its virtual machine to compile the source code into something called quad code. The quad code is optimized automatically into optimized quad code which is the virtual machine instructions. It is from these instructions that the runtime (PSL process) is executed. A runtime is created for each collector and standard parameter that is part of the KM. (A discovery process is created for the KM only when a developer defines a custom discovery cycle.) In the namespace each KM has its own symbol tree, which is part of a three level object hierarchy, Application Class, Application Instance, and Parameter. A parameter is part of a particular application class and is an attribute of an application instance. When dealing with the object hierarchy in PATROL, the highest level of this hierarchy for a KM is the application class which is only visible if the developer creates a container for the class object. Under the application class there can be one or multiple instances of the class. When parameters are created for a KM they belong to the KM tree they are running under. Even though a parameter belongs to specific class, a parameter can collect data for any PATROL application. All PATROL applications are located under the root object which appears as the computer instance on a PATROL console. The object hierarchy for the PATROL agent is as follows;

    1. Root = Computer Instance = / 2. PATROL KM = Application Class = __name__ = / 3. Application Instance = //APP_INSTANCE 4. Parameters = //APP_INSTANCE/PARAMETER

  • Page 7 of 40 Susan E. Miller BMCS:CE

    Creating the Parameter

    To create a parameter a developer uses a PATROL Classic Console running in developer mode and adds a parameter object to a KM. They typically write a PSL script that essentially goes out checks the object and returns a value that indicates something about the monitored object. Parameters have some mandatory properties. These include a unique parameter name, which will identify the parameter in the namespace, the parameter type, the parameter script and the active flag. The name of the parameter can be anything but cannot contain spaces. Recommended naming conventions for a parameter are to name the parameter with the first two or three letter of the KM followed by initial capitalization. Once the name has been defined for a parameter, it cannot be changed. The type of parameter can be a standard, collector, or consumer. The script used for a parameter depends on the type of parameter. Collectors can only be written in PSL, as they use the PSL set() function to set a collected value to a consumer parameter. Standards can use any language. If written in PSL a standard parameter can act like a collector. Consumers have no script as they get their value from a standard or collector parameter. The parameter active flag is a toggle that allows you to turn on or off parameters. The type of parameter you are defining will determine the execution properties. Parameters that are responsible for collecting data will have to execute scripts to gather the data. All parameters scripts must have a command type defined for the script. You can only use command types that are defined on the application level or computer class level. By default, the command types 'OS' and 'PSL' is always available, however a PATROL developer can add any number of additional command types. The command types tell the agent what language to execute or compile the script in.

  • Page 8 of 40 Susan E. Miller BMCS:CE

    Two other parameter definitions are the environment and style. The environment allows you to define OS environment variables you might need in order for your command to execute correctly. In addition to an OS environment variable the environment variable's value can contain % macros for example %{/hostname}. The style of the parameter can be one of six styles, Graph, Gauge, Stoplight, State Boolean, No Output, and Text. The default type is No Output. Thresholds cannot be set against all parameter types except those which collect text. In the case where you want to display collected text and set a threshold you might want to consider using a standard parameter that collects the text value and a consumer for the threshold. For example: #Count and display the Users in /etc/passwd openFile=cat(/etc/passwd); getUser=nthargf(openFile, 1); count=lines(getUser); set(value, openFile); set(../UserCount/value, count); Other properties for a parameter might include credentials that would be needed to execute a command. You could hardcode OS credentials in a script, but most developers know you are opening yourself up for a security risk as well as a maintenance problem, because this would force you to modify the KM whenever the username or password of an application changes. The most efficient type of parameter in most cases will be a collector parameter. A fairly common example of collector could be described as follows: Suppose you wanted to monitor the number of errors found in a log file. A developer would write a PSL script that would use multiple functions and typically would begin by getting the size of the file, store that initial size in a configuration variable in the agent configuration database, and then use functions like fseek() and ftell() to determine where the last read left off. Channel functions like fopen() and read() would be used to open and read the log file. The grep() function might be used to search for an error, and the lines() function might be used to count the number of errors. The number of errors found is set using the set() function to the namespace where the current value is stored. This is the value that is analyzed against any thresholds set for the parameter object.

  • Page 9 of 40 Susan E. Miller BMCS:CE

    Consumers would be used to store and display the values collected by the collector. If you used a standard parameter for this you would have to write a parameter for each action you want to perform, thus resulting in a very efficient KM. The last definition of the parameter to describe is the poll cycle. The poll cycle is set only against collector and standard parameters and indicates how often to execute the PSL process and return a value. Each time the process executes a new value is collected, saved in the namespace and written to the parameter history database at the appropriate time. Only the most current value is kept in the namespace. Previous values are kept in the history cache until written to the history database. Schedules for parameter execution can be set using a number of methods. The initial schedule however is typically set by the developer. Parameter processes can be scheduled directly on the parameter property sheet by the hour, minute, second, day, week, month and at specific intervals. Poll schedules set with PCM, the Event Manager KM or from an operator console can be scheduled by the minute or seconds. (The interval you can set at is based on which tool you are using.) As an additional note, when you define scheduling information for parameters that execute on an irregular schedule you should keep in mind that if the agent is down during the requested execution time, the command will not execute. Sometimes this leads to confusion.

    Figure 2 - Setting a Poll Cycle

  • Page 10 of 40 Susan E. Miller BMCS:CE

    If you instruct the agent to start your process at 1:00 PM and the agent was down at that moment, but started back up at 1:05 PM, it does not know it should start the execution for your command and will wait until the next scheduled time. Therefore if you have a command that executes in this manor you would need to build in some type of check and balance system. You can set at schedule to Start Immediately, Set by hour, minutes, seconds, or Start on - every day of the week, some days or a particular day. The default setting is every - 10 minutes. We briefly mentioned that parameters thresholds cannot be set against a PSL process that is collecting a textual value. Let us delve into that a little further. In my example suppose a developer was using a command to get the uptime of a server. The uptime would be returned as the number of hours a system has been up which would include something like 2 Days, 12 hours and so forth. Suppose you wanted to know the total uptime and set an alarm condition if the uptime was less than 24 hours? Since the value returned is text you would not be able to set a threshold against the collected value unless the developer converted the collected values to numerical values. The script below demonstrates how that could be done for example: #----------------------------------------------------- up=get("/uptUptime"); print("\n", up); daysUp=nthlinef(up, "1"); hoursMin=nthlinef(up, "3"); hoursUp=ntharg(hoursMin, 1, ":"); minUp=ntharg(hoursMin, 2, ":"); convertDays=daysUp * 24; addHrs=hoursUp + convertDays; calMin=minUp / 24; calculate=addHrs + calMin; print("\nUpTime ", addHrs); addMin=addHrs.minUp; set(value, addMin); print("\nNew Time is Hrs plus Min: ", addMin); print("\nuptime ",calculate); #----------------------------------------------------- Now in the above example, if the developer wants to set a threshold he could. But what if they had a case where they could not convert? In this case they would need to manually set a value.

  • Page 11 of 40 Susan E. Miller BMCS:CE

    Lets say for example you are looking to see if a file exists. First you would check for the file using for example the file() function which returns the timestamp of the file. Since you dont care about the timestamp and only want to know if the value exists you would be looking for a true or false condition. In this case if the value is returned, you have a true condition and you would manually set a value indicating true for example: #----------------------------------------------------- chkFile=file(mydatafile.txt); if(chkFile != )

    { set(value, 1); #Its there } else { set(value, 0); #Its not there }

    #-----------------------------------------------------

    What Exactly is a Threshold?

    Thresholds are alarm ranges used to define a scope of numeric ranges for incident management. A PATROL Agent uses the thresholds to detect potential problems. Each time a parameter process is executed the agent automatically evaluates and compares collected value with defined ranges. If a range is crossed an event is triggered along with any associated recovery actions or annotations. A PATROL Developer typically will set initial parameter thresholds (alarm ranges) for a variety of reasons. For example, it enables immediate use of the KM after load, it allows the developer to add recovery actions directly to a KM and it provides the ability to test and certify the recovery action. PATROL Administrators use override tools to override the thresholds set by the developer. When a collected value crosses a defined threshold and an event is triggered the state of the object icon immediately changes. The object state of a parameter by default is propagated to the highest level of the object hierarchy on a PATROL Console. Event triggers which are defined as part of the PATROL Event Management engine control the propagation. When a threshold is crossed if recovery is defined, the appropriate recovery action will be automatically executed.

  • Page 12 of 40 Susan E. Miller BMCS:CE

    Thresholds are defined in two parts, a defined range of numbers that are set against a standard or consumer parameter and a state, OK, ALARM or WARN. (Thresholds cannot be set against collector parameters or parameters that collect text.) Before setting thresholds an individual would typically create a baseline to determine what is normal for their environment. This usually involves turning off any alarm settings which have already been set by a developer directly to a KM or by an administrator using some type of override. There are several methods that could be employed to turn off thresholds settings, but we will just discuss the easiest method. If you install the Change Spring KM from Event Manager you can use a menu command provided as part of the KM to generate documentation of whats currently set and as well a set of pconfig variables that you can apply to turn off the current settings. To get a baseline once the alarm settings are off, just collect data for fairly good period of time, for example three to four days. This will get enough data to get the proper averages. This data is then analyzed to determine what the average collected value is. (Make sure your history retention period is longer then your collection period, if you are going to collect for four days, set the history to five days.) The history can be pulled and averaged using the charting functions, a PSL script or various other methods. It is from this data that you determine what normalized data is. Once you know what the normal range of values is, you set a threshold based on the abnormal range of values. The range of values defines the scope of what an abnormal value would be. In addition to setting the range of values for the parameter object, the administrator setting the thresholds also sets the state. The state and the range are physically 2 different things. Essentially when a value is collected it is analyzed to determine if the collected value falls within the range of defined values and then if it does it changes the state of the parameter to the state defined as part of the threshold for the object to the value of state that was defined. Internally the state of the object becomes the object status. Each time a value is collected that crosses a threshold an event is generated. PATROL Developers typically set base ranges and define the alert types for a parameter.

  • Page 13 of 40 Susan E. Miller BMCS:CE

    A couple of key notes to be aware of are as follows, alarms must be enabled before values can be defined, values can only be set numerically. Once defined, a developer can create an automated recovery action Figure 3 - Example Baseline Documentation

    A final note about parameters is that history is only kept on objects that collect numeric values. Therefore for example the following values collected in this example script would not be available as part of the parameter history. In cases where the values collected contain critical data a developer might display the collected data with a textual display for the parameter and then would write the data out to a log file. For example: curProcs=process("*"); procNum=lines(curProcs); curTime=asctime(time()); #Create the message - Assign the values collected for a report mess="\nCollection time is:\n" .curTime."\nCurrent value is: ".procNum. "\n"; #................................................................ fileName=get("patrolHome")."/log/AVGNumProcLog"; openChan=fopen(fileName, "a"); write(openChan, mess); close(openChan); set("value",mess);

  • Page 14 of 40 Susan E. Miller BMCS:CE

    What Happens to the History?

    Once collected the history for parameters is stored in the parameter history database. This database is comprised of three binary files, the param.hist, dir and annotate.dat. The param.hist file stores the parameter data, annotate.dat stores additional data collected using the annotate() function usually text, and dir is essentially a type of pointer that keeps the two files in line with each other. Collected data is flushed (or written) to the history database on predefined time frames which are defined in several variables in the agent configuration database. In addition to the history files, the PATROL Agent has environment variables that enable you to define where the agent creates the history database. You can designate a location in or out of the PATROL directory structure or on another host within the network provided the agent has static access to the location. In addition to defining a directory, you can establish a location by port number. This feature allows you to accommodate a host with multiple agents by directing each agent running on a unique port number to write to a different history database. Index file - the history index file does not have a file size limit. $PATROL_HOME/log/history/ hostname/port_num/dir %PATROL_HOME%\log\history\ hostname\port_num\dir History text annotation file $PATROL_HOME/log/history/ hostname/port_num/annotate.dat %PATROL_HOME%\log\history\ hostname\port_num\annotate.dat History data file $PATROL_HOME/log/history/ hostname/port_num/param.hist %PATROL_HOME%\log\history\ hostname\port_num\param.hist The environment variables include the default which is stored under - PATROL_HOME. For Windows it is log\history\agent-name\agent-port and for UNIX it is log/history/agent-name/agent-port.

  • Page 15 of 40 Susan E. Miller BMCS:CE

    The PATROL_HISTORY variable can be defined to change the location of the parameter history files. Another variable is the PATROL_HISTORY_PORT variable. If this variable is empty or doesnt exist, the agent writes the history files to PATROL_HOME\log\history\host\ port number. The last variable is PATROL_VIRTUALNAME - PATROL_VIRTUALNAME_ PORT which is used for Cluster Specific - an alias for the host name One point we should make is that parameter history is not the same as parameter events. History is kept in the history database (repository), while events are kept in the event log repository file. History deals specifically with parameters and the values collected by the parameter PSL processes, while events in PATROL occur anytime an object changes state. This includes parameters going into or out of alarm, connecting to an agent, disconnecting, informational events etc. As far as when history is written out to disk, this is governed by configuration variables. These variables control how often history is written to the history database. There are two ways - (not mutually exclusive) - that history is written. Using a time interval where the agent writes data points to the history database when the time interval expires and the number of data points where the agent writes data points to the history database when a parameter collects a specified number of data points. In both cases the agent writes information to the history database more frequently than if only one method is activated. The agent writes once when the time interval expires and once when a parameter collects the specified number of data points. The /AgentSetup/prmHistCacheFlushTimer configuration variable determines the period of time that the cache is flushed to the history database. Flushing is based on a defined time frame how often? This time frame is used to determine the period of time that the cache is flushed to the history database. A default of 1200 seconds (or 20 minutes) is predefined. The minimum setting for this is 5 minutes. The number of intervals is stored in the /AgentSetup/prmHistCacheSize configuration variable. This defines the number of data points allowed in the cache, before writing the cache to the history file. For example, if you set the value of prmHistCacheSize to 10, when the agent has collected 10 data points for a parameter it writes the data to the history file. The default value for this is 16.

  • Page 16 of 40 Susan E. Miller BMCS:CE

    Essentially the process of writing out history could be entirely turned off if this value was set equal to or less than a value of 1. Care should be used in changing these values thus avoiding the accidental turning off the process of recording history. The last variable used that controls the writing out of history is the /AgentSetup/prmHistCacheMaxFlushTime configuration variable. This defines how much time the agent spends writing cache data to a history file. For example, the default which is set to 600 seconds, tells the agent stops writing cache data to the history file after 600, seconds even if it has not written all the cache data to the history file. The amount of history retained is based on how one, sets, the history retention period. This is also stored in an agent configuration variable /AgentSetup/historyRetentionPeriod. This configuration variable determines the number of days that collected parameter values, is, retained in the history database. After this retention period has expired, the agent deletes the retained information. The history files are circular and data is removed in a cyclic fashion. Cached or stored history can be accessed through any PATROL Console Central or Classic.

    Dealing with Corrupted History

    As discussed above how often history is written to the database depends on the setting of agent configuration variables. Therefore if an agent was shutdown abruptly history can become corrupt. This is because the agent was shutdown before it had a chance to write out all of the history or was in the process of writing out history at shutdown time. When you see these problems it is usually associated with an error message like parameter history inconsistencies found! The only way these problems occur with the history database is through undesirable incidents like an abrupt shut down of the PATROL Agent. So what is the actual result of an abrupt shutdown? An abrupt shutdown leads to one or more pointers in the dir file pointing to erroneous data in the other two files. In addition to our previous statement corrupted history leads to several other things, a block of data that is no longer available or unreadable but most importantly it could cause the agent to consume excessive amounts of CPU and memory.

  • Page 17 of 40 Susan E. Miller BMCS:CE

    The fix_hist command can be used to try and solve these problems by removing the errant pointers and packing the related files: dir, annotate.dat, and param.hist. Often you will only find out that your history database has these problems when you see an error message similar to the following: "Found inconsistency in hist param database." The fix_hist utility scans the entire history file and resynchronizes the database and its indexes. Unfortunately however in removing errant pointers some data is lost. When using fix_hist while it is reading the annotation database, the fix_hist utility creates a file. When the utility encounters an error that it cannot repair, it saves the data that it has already read and discards the data that is unreachable due to a corrupted pointer or other error. The fix history utility backs up the history database files that it attempts to repair by appending "~#~" to each file, for example param.hist.~3~. The utility then writes the recovered information to the history database files, for example param.hist. There are several options that can be used to fix history. For example, shutting down the agent and running the fix_hist utility. Cleaning up history by removing history no longer needed using a PATROL Console Option under parameter menu called Clear History and in the most dire cases when history cannot be fixed dumping the history to a comma separated file and then using dump_hist from a command line, followed by shutting down the agent and relocating the damaged annotate.dat, dir, and param.hist files. In this case on agent restart new versions of the files are created To Repair History for an Agent on a Specific Port This command fixes history and packs the data and index files at port 5000. fix_hist -p 5000 To Scan the History Database a Maximum of Two Times This command fixes history and packs the data and index files for host host1 at port 3181. It will scan the history file a maximum of two times. fix_hist -host host1 -p 3181 -repair_cycle 2

  • Page 18 of 40 Susan E. Miller BMCS:CE

    To Repair History Database without Packing Index Files This command fixes history for host host1 at port 3181. The history index file is not packed. fix_hist -host host1 -p 3181 -no_pack_hist_index To Pack Index Files without Repairing History Database This command packs the files for host host1 at port 3181. The history files are not scanned and fixed. fix_hist -host host1 -p 3181 -no_repair_hist To summarize remember that history is only corrupted when the PATROL Agent is shutdown ungracefully. There are three main ways this can happen, the computer crashes, the computer is shutdown gracefully, but the PATROL Agent was left running (occurs on windows when agent is run as a process) or on Unix the PATROL Agent process was killed using the 'kill -9' command. There is an optional flag that can be set in the agent configuration database that can be used to tell an agent how and when to fix history. This variable is called "/AgentSetup/fixHistFlag" which has a default set of never. .

    Always repair - unconditionally Only repair when the dirtybit is set Never repair on agent startup

    An important thing to note is that the PATROL Agent almost always has the history file open for writes. Since we know that if the PATROL Agent is brought down ungracefully, the history file most assuredly will get corrupted. So a good practice would be to shutdown the PATROL Agent before shutting down the computer on systems where the agent runs as a process. The proper way to kill a PATROL Agent is to use the pconfig 'kill' command. On UNIX do not use kill -9, this forces the Agent to shutdown without giving it a chance to close its files. You can add some lines of code to your OS shutdown script to kill the Agent prior to OS shutdown. pconfig +KILL [+verbose] [-port port number] [-host hostname]

  • Page 19 of 40 Susan E. Miller BMCS:CE

    About Dumping History

    History can be dumped from a command line using dump_hist. If you use this command with the format option you can generate a dat file for a database. You can also include options to generate a comma separated file that can be opened in Excel. dump_hist format The following command produces a .dat file for databases like Oracle, Sybase, and Microsoft SQL Server. dump_hist -format ",,%H,%A,%I,%P,%y-%m-%d %h:%M:%s,%v" Options are placed between quotes using characters like commas, pipe symbol, and dashes to separate values %H host name, %A application name, %I instance name %P parameter name, %y year (yyyy), %m month (mm) %d day (dd), %h hour, %M minutes (MM), %s seconds (ss) %v parameter value stored in param.hist file The output of the above would produce something like the following for each value. - ,,smile,USERS,USERS,USRNoSession,CCYY-10-16 20:51:53,22

  • Page 20 of 40 Susan E. Miller BMCS:CE

    Accessing History

    In addition to the dump_hist command, history can be accessed using the PSL history() function, or viewed through PATROL Console charting. Several example scripts are provided below:

    Using the Charting Functions to Get the History Averages This is an example script that uses various functions to average history and is executed from a menu command. requires response_def_lib; requires unix_misc_lib; response_def(); buf = system("%DUMP KM_LIST"); buf = nthlinef(buf,"4-".(int(lines(buf)) - 1)); kms = ""; foreach lin (buf) { kms = kms . ntharg(lin, 2) . "=0\n"; } kms = sort(kms); resp_ret = response("APPLICATIONS",-1,"h=430,w=395", LABEL."Select Application(s)", SEP_HORIZ, LIST_MULTIPLE.kms ); act = trim(nthlinef(resp_ret,1), "\n"); if (act) { sel_list = trim(nthlinef(resp_ret,2), "\n"); apps = ""; foreach word sel_num (sel_list) { apps = apps."/".nthargf(nthlinef(kms, sel_num), 1, "=") . "\n"; } insts=""; parms=""; buf=""; foreach line appline (apps) { app_name=ntharg(appline,1); insts = get_vars(app_name, "nodes"); insts = nthlinef(insts,"3-"); foreach line instline (insts)

  • Page 21 of 40 Susan E. Miller BMCS:CE

    { inst_name=app_name."/".ntharg(instline,1); buf = get_vars(inst_name, "nodes"); buf = nthlinef(buf,"3-"); foreach line bufline (buf) { parms=parms.inst_name."/".ntharg(bufline,1)."=0\n"; } } } parms = sort(parms); resp_ret = response("Parameter Average Chart",-1,"h=430,w=395", LABEL."Select Parameters to Chart", SEP_HORIZ, LIST_MULTIPLE.parms, SEP_HORIZ, RADIO_HORIZ."Monthly=1\nWeekly=0\nDaily=0\nHourly=0\n", SEP_HORIZ ); action = trim(nthlinef(resp_ret,1), "\n"); chart_type = trim(nthlinef(resp_ret,3), "\n"); if (chart_type == 1) {timestring="%m"; header="Monthly ";} elsif (chart_type == 2) {timestring="%U"; header="Weekly ";} elsif (chart_type == 3) {timestring="%j"; header="Daily ";} else {timestring="%j%H"; header="Hourly ";} if(action) { patrolhome=get("/patrolHome"); gdf_string="ChartTemplate: ".patrolhome."/lib/chart/line.ctf\nChartTitle: ".header."Parameter Averages\n"; sel_list = trim(nthlinef(resp_ret,2), "\n"); foreach word sel_num (sel_list) { selparm=nthargf(nthlinef(parms, sel_num), 1, "="); histlist=history(selparm,"tv"); firsttime=1; total=0; prevts=0; prevgroup=0; average=0; datapoints=0; #print (selparm, "\n"); gdf_string=gdf_string."StaticData2D:".selparm; totlines=lines(histlist); histlines=0; foreach line histline (histlist) { histlines++; histts=ntharg(histline,2);

  • Page 22 of 40 Susan E. Miller BMCS:CE

    histval=ntharg(histline,1); histtime=asctime(histts,timestring); #print ("TS: ",histts," val: ",histval," group: ",histtime,"\n"); if (firsttime) { total=histval; datapoints=1; prevts=histts; prevgroup=histtime; firsttime=0; } elsif (totlines == histlines) { datapoints++; total=total + histval; prevts=histts; average=total / datapoints; lavg=", ".prevts." ".average; #print ("Chart: ",prevts," ",average,"\n"); gdf_string = gdf_string.lavg; } else { if (prevgroup == histtime) { total=total + histval; datapoints++; prevts=histts; } else { average=total / datapoints; lavg=", ".prevts." ".average; #print ("Chart: ",prevts," ",average,"\n"); gdf_string = gdf_string.lavg; total=histval; datapoints=1; prevts=histts; prevgroup=histtime; } } } gdf_string=gdf_string."\n"; } #print (gdf_string); chart(CHART_LOAD,gdf_string); } }

  • Page 23 of 40 Susan E. Miller BMCS:CE

    Using the history() Function for Simple Averaging This is an example script that can be added as a menu command that asks the user which parameter to average the history on. whatParam=%%{What Parameter place the full path in quotes}; cpuHist=history(whatParam,"tv"); data=ntharg(cpuHist, "1"); numProcs=lines(data); foreach entry(data) { simVal=simVal + entry; } averVals= simVal / numProcs; print("Average number of processes is: ", averVals);

    What Methods are Available for Setting Thresholds and what are the Rules?

    Currently there are several methods available to set thresholds. These include PCM, Event Manager KM, Operator Overrides, Developer Overrides, PSL Overrides, and File Overrides. Where you set the threshold and how the agent stores the setting depends on which method you chose. Lets start with the method which is considered Best Practice in this method we set the threshold using PCM. However, before we actually start discussing the various methods for setting thresholds lets cover a couple of rules. Thresholds are defined based on ranges. Ranges are controlled by a range setting directly on the parameter property sheet. In addition to setting a range, you can set one to three alarms or all. Alarm types are BORDER, ALARM1 and ALARM2.

  • Page 24 of 40 Susan E. Miller BMCS:CE

    The Border alarm is controlled by the range setting. You cannot set a range beyond what is set for a border alarm. The values you set for ALARM1 must always be numerically lower than the value set for ALARM2. In regards to the setting of the thresholds themselves you should ensure that when setting the values that there are no gaps in the settings. Three Alarm Types

    Border o Border - minimum and maximum expected values

    Alarm1 o Range of values indicative of problem must share common end-

    begin point values with Alarm2 when set. (No gaps) o Range values for Alarm1 must be less then Alarm2

    Alarm2

    o Range of values indicative of problem o Range of values indicative of problem must share common end-

    begin point values with Alarm1 when set. (No gaps) If is of note to point out that if you have a range defined of 0 100, settings of 50 to 75 for ALARM1 (WARN State) and 75 to 100 for ALARM2 (ALARM State), and you capture of value of 75, an ALARM1 state will be triggered and the parameter state will be changed to WARN. Figure 4 - Other states include, Suspended, or Offline

  • Page 25 of 40 Susan E. Miller BMCS:CE

    To see a parameters state they visually are located at the lowest level of the object viewer which would be a PATROL Console. The visual states indicate the parameter condition. Parameters can be in one of five conditions, Alarm, Warning, Offline, Suspended, Message, or OK. Range Definitions include the following:

    Range Limits o Range Limits Minimum, Maximum (unlimited)

    Default Min 0 - Max 100 Used to define the entire spectrum of possible values (Set by

    developer only) Auto Scale (Enabled by default)

    o Visual setting that scales using actual minimum and maximum parameter values (Set by developer only)

    Border, Alarm1 and Alarm2 o Range of values determined by baseline o Border used to control range limits when a PATROL administrator

    overrides a developer setting. o Ranges cannot be set beyond the range limit

    Figure 5 - Example Range of Values

  • Page 26 of 40 Susan E. Miller BMCS:CE

    PCM and Best Practice

    Realistically when we discuss Best Practice there are two methods - PATROL Configuration Manager (PCM) and the PATROL Event Manager KM. Since PCM uses the Event Manager KM behind the scene they are essentially the same. Both of these methods store the settings in exactly the same location in the agent configuration database.

    Key Notes Concerning PATROL Configuration Manager (PCM) Although PCM writes its threshold to the same location in the agent configuration database as the Event Manager KM - (/AS/EVENSPRING/PARAM_SETTINGS/THRESHOLD) folder it can only be used if parameter files exist for the KM. Typically parameter files are available for most BMC Solution knowledge modules. See the following example of how the threshold is written to the agent configuration database with PCM. Example: "/AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PSLBAS-ADMINISTRATOR/__ANYINST__/ADMCurNumProc" = { REPLACE = "1,1 0 500 0 0 2,1 250 300 0 0 1,1 300 500 0 0 2"}

    Figure 6 - PCM Overrides

  • Page 27 of 40 Susan E. Miller BMCS:CE

    PATROL Event Manager KM

    The second method is to use the PATROL Event Manager KM. essentially this is the same as setting through PCM as they both write the threshold to exactly the same location. Set using menu commands from a PATROL Console, writes to the same location as PCM: /AS/EVENSPRING/PARAM_SETTINGS/THRESHOLD folder. Example: "/AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PSLBAS-ADMINISTRATOR/__ANYINST__/ADMCurNumProc" = { REPLACE = ""1,1 0 500 0 0 2,1 250 300 0 0 1,1 300 500 0 0 2"}

    Figure 7 - Event Manager Thresholds

  • Page 28 of 40 Susan E. Miller BMCS:CE

    Interpreting the PCM and Event Manager Setting: To interpret this we will break it down by the value you see: Item Description "/AS/EVENTSPRING Variable Folder /PARAM_SETTINGS Variable Folder /THRESHOLDS Variable Folder /PSLBAS-ADMINISTRATOR Application Class /__ANYINST__ Any Application Instance or could be a

    specific instance /ADMCurNumProc" Parameter 1 This alarm is active 1 Border range is active 0 Begin value 500 End Value 0 Trigger when 0 means immediately on

    alarm. 0 If trigger value something other than -0- this

    would be the number of times before 2 State ALARM 1 Alarm 1 setting is active 250 Begin value 300 End Value 0 Trigger when 0 means immediately on

    alarm. 0 If trigger value something other than -0- this

    would be the number of times before 1 State - WARN 1 Alarm 2 setting is active 300 Begin value 500 End Value 0 Trigger when 0 means immediately on

    alarm. 0 If trigger value something other than -0- this

    would be the number of times before 2 State - ALARM

  • Page 29 of 40 Susan E. Miller BMCS:CE

    Setting with Operator Overrides

    Prior to the release of the PATROL 3.3 it was a common practice to write parameter thresholds settings for the baseline properties of a parameter directly to the KM. This resulted in a huge amount of effort and time in managing parameter thresholds. Additionally, if an upgraded KM was installed you had to migrate changes from one version of a KM to another. If you only had a few servers this was no big deal, but if you had 50 plus, or 25 plus servers this required a huge effort. Operator overrides were introduced with PATROL version 3.3 and stored the thresholds in the agent configuration database. Essentially it worked using the following methodology. The first time a user set an operator override, the agent would automatically add a new variable folder to the agent configuration called __tuning__. A new folder was then created for each application class under the tuning folder with a sub folder for each instance. The variable name was linked directly to the parameter name. The agent would load the values set with overrides over top of the developer settings and use the overrides. For example:

    /___tuning___/NT_CPU/CPU_0/CPUprcrProcessorTimePercent Values were stored numerically with each set of values tied directly to a Boolean value of 1 or 0 indicating whether a setting has been created for the value.

  • Page 30 of 40 Susan E. Miller BMCS:CE

    The authority or right to set thresholds using this method was dependent upon the variable allowoverrideparameter in the patrol.conf file being set to true.

    Operator overrides are similar to PATROL Event Manager and PCM. Operator overrides uses 22 fields which contain either digital values or the actual state to indicate the ranges as well as whether a setting is active or inactive. For example you might see something like the following: 1, 365, 600, 1, 0, 500, OK, 1, 400, 450, WARN, 1, 450, 500, ALARM, 1, 1, 0, 0, 0, 0, EOD Field Definition Field Position 1: Is the override active?. Field Position: History retention period. Field Position: Polling interval? (Always -1 for

    consumers.) Field Positions 4, 5, 6 and 7: Border Alarms. Field Positions 8, 9, 10 and 11: Alarm1 Field Positions 12, 13, 14 and 15: Alarm2 Field Positions 16 21: Trigger When? Field 22: EOD

  • Page 31 of 40 Susan E. Miller BMCS:CE

    Using File Overrides This method relies upon the use of external files as a method for managing parameter overrides for environments with a large number of agents. In this method, parameter overrides are stored in one or more external files. The PATROL Agent periodically checks if an external override file has changed or if a different external override file should be used based on the setting of a time based agent configuration variable. If a file or its contents change, the PATROL Agent implements the new overrides. These settings can be stored in a single file or in multiple files in the same directory. In order to use file overrides a variable called allowexternaloverride must be added and set to true in the patrol.conf file under the agent rights section This in turn allows the user to writes the overrides to a file which has precedence over operator. The user sets the file location (Relative Path) in the agent configuration database using a variable: "/AgentSetup/ExternalOverride" = { REPLACE=File-Name"} By default the agent looks for the file under PATROL_HOME/lib/admin directory. In addition to setting the location the user defines a Poll Time that tells the agent how often to check the file for changes. "/AgentSetup/ExternalOverridePolltime" The default is 600 seconds, the minimum is 60 second. In addition to the above settings the user creates a file named @timestamp file (no extension.) When you store override definitions in a single file, the PATROL Agent periodically checks the timestamp of the file to see if it has been updated. If the file has been updated, the Agent implements the new parameter override definitions contained in the file. When you store override definitions in multiple files, the PATROL Agent checks the directory containing the files for updated definitions. If the files contain new definitions, the Agent implements them.

  • Page 32 of 40 Susan E. Miller BMCS:CE

    Example Parameter Overrides File [/NT_LOGICAL_DISKS//LDldDiskTimePercent] ACTIVE=1 BORDER_ACTIVE=1 BORDER_MINIMUM=10 BORDER_MAXIMUM=90 BORDER_STATE=ALARM BORDER_ALARM_WHEN=ALARM_INSTANT BORDER_ALARM_WHEN_N=0 ALARM1_ACTIVE=1 ALARM1_MINIMUM=50 ALARM1_MAXIMUM=70 ALARM1_STATE=WARN ALARM1_ALARM_WHEN=ALARM_INSTANT ALARM1_ALARM_WHEN_N=0 ALARM2_ACTIVE=1 ALARM2_MINIMUM=70 ALARM2_MAXIMUM=90 ALARM2_STATE=ALARM ALARM2_ALARM_WHEN=ALARM_INSTANT ALARM2_ALARM_WHEN_N=0 ALARM2_DO_RECOVERY=NO

    PSL Overrides This is the process of using the PSL function set_alarm_ranges() to change the alarm ranges of a parameter. This method is useful for intelligent Knowledge Modules that determine their own alarm ranges during run-time. Additionally this method could be used to quickly change a setting. This method overrides all of methods therefore use of this method is not recommended for regular use as it could be CPU intensive and resulting in problems if parameters are frequently changed. new_ranges= "0 1 99 0 0 0\n0 80 90 0 0 0\n1 90 99 1 0 2"; result= set_alarm_ranges(new_ranges,"","","","/FILESYSTEM/root/FSCapacity");

  • Page 33 of 40 Susan E. Miller BMCS:CE

    This ability to use psl to set or change ranges is dependent upon a setting in the patrol.conf file under the agent rights section. Default is set to true. [Agent] define Agentrights allrights allowpsloverride = true end

    Developer Thresholds and the Developer As part of the application logic when working with parameters, most developers will predefine some type of initial thresholds using quantitative measurements. In order to do this they need to make a judgment based on observations of the application during the testing and certification phase. Because of these quantitative measurement settings, the PATROL, software can begin monitoring a system directly after it is installed. In some cases, these preset thresholds can lead to some confusion about the PATROL Software, as it appears that everything is in alarm at once. One simply must realize that once PATROL has been installed; the thresholds set by the developer must be fined tuned based on collecting data for a short time period and then changing the thresholds (base-lining) of course this is accomplished once you know what is average or normal for the system you are managing. In all the methods described for the process of setting of the threshold they all deal specifically with parameters. In all cases this setting is based on defining a range of digital (numeric) values. These ranges define the numeric values that you have determined to be abnormal. The values are used as an automatic measuring tool of how a component is working. If the agent collects a value that falls within the defined range, it will automatically trigger an event and take any appropriate event action, which could be notification like email or paging the correct individual. Once a threshold is set, one can add automatic reactions (recovery) that will occur when a specific condition occurs. For example, the monitored object is a process and the process is not running. A recovery action could check to ensure that the process is not running and then restart the process.

  • Page 34 of 40 Susan E. Miller BMCS:CE

    This functionality is the result of monitoring the status of the object using relational operators (greater than, lower than, less than or equal.) For each parameter, the agent collects the raw data measurement, and then converts the quantitative measurement into a status (based on what you define for the state). Once the raw data is collected and interpreted by the agent the status, becomes the condition to determine the reaction. (Thus automation occurs status of an object and setting of a threshold, are two separate actions.) When thresholds are set, the values collected by a parameter are used to determine the status of the managed objects health, once obtained the status is input to a control loop. Control loops are observations and actions using single, multiple, inner or outer loops.

    About Recovery Actions

    A recovery action is an action that can be executed when the values defined for a threshold for a standard or a consumer parameter falls within or outside a certain range. Recovery actions are stored and executed only by the PATROL Agent. They can be used to send an e-mail message, activate a beeper, tune a system that is in a certain condition, or initiate an action that will execute a recovery procedure and can be added by a developer directly to the parameter definition or with the use of PATROL Configuration Manager or the Event Manager KM. When defining recovery actions, it is very important that you understand how alert ranges (thresholds) work. A recovery action definition is actually performed based on a range, and the state is merely an attribute of this range. This means that you can define recovery actions on OK states as well as alarm and warning states. A parameter can store a list of recovery actions associated with different alert ranges that you have set in the parameter thresholds. When you create parameter recovery action commands or tasks, you can use PSL functions, built-in commands, and built-in macro variables. Recovery Actions are identified numerically and are executed in the order that they are created. The example below is intended to demonstrate how recovery actions are handled. In this example the alarm ranges were set at 50 to 75 for alarm1 and 75 to 100 for alarm2 with two "recovery actions" for alarm1 and two recovery actions for alarm2. The parameter scheduled was based on a 10 minute polling cycle.

  • Page 35 of 40 Susan E. Miller BMCS:CE

    Time Value Action 1:00 48 OBJECT STATE OK 1:20 69 CHANGE STATE A1 WARN

    EXECUTE RECOVERY A1R1 1:30 72 STATE REMAINS WARN FOR A1

    EXECUTE RECOVERY A1R2 1:40 30 CHANGE STATE TO OK 1:50 61 CHANGE STATE A1 WARN

    EXECUTE RECOVERY A1R1 2:00 65 STATE REMAINS WARN FOR A1

    EXECUTE RECOVERY A1R2 2:10 76 CHANGE STATE TO A2 ALARM

    EXECUTE RECOVERY A2R1 2:20 79 STATE REMAINS ALARM

    EXECUTE RECOVERY A2R2 2:30 80 STATE REMAINS IN ALARM

    NO RECOVERY ACTION EXECUTED The primary point to make here is that even though at 2:30 the collected value was still crossed a defined threshold no recovery actions are executed by the agent. This is because it had exhausted the list of recovery actions.

  • Page 36 of 40 Susan E. Miller BMCS:CE

    In General

    To delve further into the setting of thresholds we should discuss how PATROL delivers its automation. We could say that PATROL uses value based automation. Value based automation is a reaction which is a consequence of observing values, gathered by an agent. These values are numeric (digital) scalar quantities (measured or observed values) Scalar deals with a single item or value, which contrasts with vectors and arrays, which are made up of multiple values.

    With this when a value is collected, it is compared with the scope (alarm range) set for the desired values. The result of this comparison (a simple algebraic difference) is used to determine whether an action should occur or not. Internally an agent uses several control types, intrinsic, internal, external and intelligent. A result that crosses the predefined scope of desired values will be interpreted as a condition automatically, which is used as input for Boolean logic (if, then) which in turn determines the action the agent should execute.

    The optimal actuation of control (the process of putting into motion) can be quantitatively calculated from the observation. For complex calculations, intelligent logic can used as part of a PSL script to calculate the reaction that the agent should take. Reactions can be complex or simple one- line statements.

    When the agent has completed its calculation inside the control loop, the developer closes the loop as soon as possible to the origin of the observation so that the logic for the parameter executes as efficiently as possible. How simple or complex a calculation is depends entirely upon the developer who wrote the parameter script. However, one should be aware that to provide complex monitoring the intelligent autonomous agent must be on the same system as the monitored object with direct complete access to the objects being monitored and actuators of the controlled object. The PATROL intelligent autonomous agent will derive the final status of the object based on the collected value and its comparisons.

    When a threshold is crossed an event is generated. Events occur in PATROL for multiple reasons in fact since everything in PATROL is an object; anytime an object changes state, an event occurs. Therefore examples of events would include items like values collected for parameter objects that fall into the defined alarm range, when a console connects-disconnects to an agent, a state (object status) is propagated to a higher object level and so forth. This is typically called event based automation. In

  • Page 37 of 40 Susan E. Miller BMCS:CE

    PATROL, events are managed by an internal event management engine called the PATROL Event Manager. To express what an event is on simpler terms we could say that an event means that something has happened, is happening or has changed for an object. PATROL uses its internal event engine for event-based automation. Even though events are triggered automatically by PATROL, you can still integrate PATROL with some other type of event management system. For more granular event management you could implement the PATROL Event Manager Knowledge Module, which forwards all events to a central location where they are processed based on event rules that you define.. With the PATROL Event Manager Knowledge Module, you can define and manage all of your thresholds and automatic recovery reactions for any parameter in a single location. Likewise, you can perform very granular event management for the handling of event notifications. In most cases, you will notify someone that an event has occurred for the managed object using some type of notification method like email, paging software and so forth. The PATROL event based automation engine keeps events in an event log as well as an event repository. (Event repository is a location in memory) Every event is recorded as an event record and is assigned a unique event ID. Event filters can be set at the source to limit the types of event forwarded to either the PATROL Event Browser or another event management system. An event record contains fields like the status, object name, the time, the parameter object name, value, status and so forth. The PATROL Event Manager engine allows for additional annotations to the event using a descriptor that will allow the addition of additional information for event record management. In addition, each event includes an editable diary field. For supporting the monitored object, one can include a URL that can take a user responding to an event immediately to a predefined web location where in depth detail could be provided for how one should respond to an event that has occurred. In conclusion, the management of thresholds and events does not have to be a complex hard to understand process. The key is standardization. This means choose only one method and use that method set and control all of your parameter thresholds.

  • Page 38 of 40 Susan E. Miller BMCS:CE

    BMC SOFTWARE SDK LICENSE AGREEMENT

    THIS AGREEMENT APPLIES TO OPENING A PACKAGE, INSTALLING, PRESSING AGREE OR YES OR USING BMC MODULES, THE ENTITY OR INDIVIDUAL ENTERING INTO THIS AGREEMENT AGREES TO BE BOUND BY THE FOLLOWING TERMS, IF YOU DO NOT AGREE WITH ANY OF THESE TERMS, DO NOT INSTALL OR USE THE BMC MODULES AND PROMPTLY RETURN THE BMC MODULES TO BMC. IF YOU REJECT THIS AGREEMENT YOU WILL NOT ACQUIRE ANY LICENSE TO USE THE BMC MODULES. SCOPE OF AGREEMENT. This Agreement is between the entity or individual entering into this Agreement (You) and BMC Software, Inc. (BMC). This Agreement governs Your use of the BMC Modules, unless You agreed to a web-based license agreement with BMC when ordering the BMC Modules, in which case that web-based license agreement governs the use of the BMC Modules. As used herein, Complementary Product means any product of Yours that embeds or is dependent for execution upon a BMC Module. LICENSE. BMC grants You a non-exclusive, non-transferable, personal license (License) for one developer (the Developer) (a) to copy and operate the BMC Modules for the sole purpose of designing, developing and testing Complementary Products, provided that You acknowledge and agree that the right of embedding does not include a right of distribution, and (b) to copy and operate Complementary Products (including any BMC Modules embedded therein) solely for Your internal production purposes. You may not and agree not to: (i) copy the BMC Modules or the Complementary Products except as expressly permitted in the immediately foregoing sentence, (ii) distribute, resell, rent or lease the BMC Modules or the Complementary Products, (iii) use the BMC Modules for production purposes except as expressly permitted with respect to embedded BMC Modules in the immediately foregoing sentence, (iv) disassemble or reverse engineer any BMC Module, or decompile or otherwise attempt to derive any BMC Module source code from executable code, except to the extent expressly permitted by applicable law despite this limitation, (v) release any information to any third parties on the functionality or performance of the BMC Modules without BMC's prior written consent, or (vi) provide a third party with the results of any functional evaluation, or benchmarking or performance tests, without BMC's prior written approval. Additional usage restrictions may apply to certain third-party files or programs embedded in a BMC Module applicable installation instructions or release notes may contain the relevant details. Notwithstanding anything in this Agreement to the contrary, the licenses granted in this Agreement (A) do not grant You the right to use any BMC Module (such rights, if any, are granted under a separate license), (B) do not extend to any rights under any patents or patent applications under which BMC has any rights, and (C) do not extend to any use of the BMC Modules in combination with any product, service or software other than the Complementary Product for which it is registered and approved. FEES. You agree to pay any shipping or handling fees associated with the BMC Modules. You is responsible for taxes, if any. TERMINATION. This Agreement terminates automatically if You breach any of its terms. Either party may terminate this Agreement without cause on 30 days prior written notice. Upon termination, You must uninstall the BMC Modules, and either certify their destruction or return them to BMC. OWNERSHIP. BMC, or its affiliates or licensors, retains all right, title and interest in the BMC Modules and copies thereof, and any intellectual property, informational, industrial property and proprietary rights therein. BMC neither grants nor otherwise transfers any rights of ownership in the BMC Modules to You. The BMC Modules are protected by applicable copyright, trade secret, patent and other intellectual and industrial property laws. As between You and BMC, You retain all right, title and interest in any intellectual property, information, industrial property and proprietary rights in the Complementary BMC Modules, excluding and subject to those contained in the BMC Modules. CONFIDENTIAL AND PROPRIETARY INFORMATION. The BMC Modules contain valuable confidential information and trade secrets of BMC. You may not use the BMC Modules other than as specifically allowed under the license granted in this Agreement. You may not disclose the BMC Modules or any part thereof, to third parties, except that (i) You may disclose the BMC Modules or parts thereof to Developer if Developer has obligations of confidentiality which are at least as protective of BMCs confidential information and trade secrets as the provisions of this Agreement and if Developers use of the BMC Modules is consistent with the terms of this Agreement, and (ii) if You use a Complementary Product internally for production purposes, You may disclose the BMC Modules or parts thereof to its employees who are under obligations of confidentiality at least as protective of BMCs confidential information and trade secrets as the provisions of this Agreement, whose use of the BMC Modules is consistent with the terms of this Agreement, and who need to receive such disclosure in order to install, operate, support or maintain the Complementary BMC Modules. You agree to use all reasonable efforts to prevent the unauthorized use, copying, publication or dissemination of any BMC Module.

  • Page 39 of 40 Susan E. Miller BMCS:CE

    WARRANTY DISCLAIMER. THE BMC MODULES ARE PROVIDED AS IS, WITH ALL FAULTS. BMC, ITS AFFILIATES AND LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND QUIET ENJOYMENT. BMC DOES NOT WARRANT THAT THE OPERATION OF THE BMC MODULES OR THE COMPLEMENTARY PRODUCTS WILL BE UNINTERRUPTED, VIRUS OR ERROR FREE, OR THAT THERE ARE NO DEFECTS. LIMITS ON BMCS LIABILITY. IN NO EVENT WILL BMC, ITS AFFILIATES OR LICENSORS, BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES RELATING TO OR ARISING OUT OF THIS AGREEMENT, THE BMC MODULES AND/OR ANY COMPLEMENTARY PRODUCT (INCLUDING WITHOUT LIMITATION LOST PROFITS, LOST COMPUTER USAGE TIME, AND DAMAGE OR LOSS OF USE OF DATA), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND IRRESPECTIVE OF ANY NEGLIGENCE OF BMC OR WHETHER SUCH DAMAGES RESULT FROM A CLAIM ARISING UNDER TORT OR CONTRACT LAW. BMCS LIABILITY FOR DIRECT DAMAGES IS LIMITED TO THE GREATER OF (I) THE AMOUNT PAID BY YOU FOR THE LICENSE TO THE BMC MODULE, IF ANY, AND (II) $1000. VERIFICATION. If requested by BMC, You will deliver to BMC written certification relating to Your use of the BMC Modules and/or the Complementary Products in compliance with the terms of this Agreement. BMC may audit Your use of the BMC Modules and/or Complementary Products to confirm such compliance. EXPORT CONTROLS. You will cooperate with BMC as reasonably necessary to ensure compliance with the laws and regulations of the United States and all other relevant countries, relating to exports and re-exports (Export Laws). You may not import, export, re-export or transfer, directly or indirectly, including via remote access, any part of the BMC Modules, or any other BMC information or technology, in violation of any such laws and regulations, or without any written governmental authorization required under applicable Export Laws. Neither the BMC Modules nor the underlying information or technology may be downloaded or otherwise provided or made available, either directly or indirectly, (i) into Cuba, Iran, Libya, Sudan or any other country subject to U.S. trade sanctions, to individuals or entities controlled by such countries, or to nationals or residents of such countries other than nationals who are lawfully admitted permanent residents of countries not subject to such sanctions; or (ii) to anyone on the U.S. Treasury Departments list of Specially Designated Nationals and blocked persons or the U.S. Commerce Departments Table of Denial Orders. BY OPENING THE PACKAGE, INSTALLING, PRESSING AGREE OR YES OR USING THE BMC MODULES, YOU AGREE TO THE FOREGOING AND REPRESENT AND WARRANT THAT YOU ARE NOT LOCATED IN, UNDER THE CONTOL OF, OR A NATIONAL OR RESIDENT OF ANY SUCH COUNTRY OR ON ANY SUCH LIST. DISPUTE RESOLUTION AND GOVERNING LAW. ANY CONTROVERSY OR CLAIM ARISING OUT OF OR RELATING TO THIS AGREEMENT, OR THE BREACH HEREOF, WILL BE SETTLED BY ARBITRATION ADMINISTERED BY THE AMERICAN ARBITRATION ASSOCIATION UNDER ITS COMMERCIAL ARBITRATION RULES IN HOUSTON, TEXAS IN ENGLISH. THE ARBITRATOR MUST FILE ALL FINDINGS WITHIN 30 DAYS AFTER THE FINAL ARBITRATION HEARING. JUDGMENT ON ANY AWARD RENDERED BY THE ARBITRATOR MAY BE ENTERED IN ANY COURT HAVING JURISDICTION THEREOF. NOTHING CONTAINED IN THIS SECTION WILL LIMIT BMC'S ABILITY TO SEEK EQUITABLE RELIEF IN ANY COURT. THE PARTIES WILL ARBITRATE DISPUTES IN CONFIDENCE. THIS AGREEMENT WILL BE GOVERNED THE SUBSTANTIVE LAWS OF THE STATE OF TEXAS. CHOICE OF LAW RULES OF ANY JURISDICTION AND THE UNITED NATIONS CONVENTION ON CONTRACTS FOR THE INTERNATIONAL SALE OF GOODS WILL NOT APPLY. U.S. GOVERNMENT RESTRICTED RIGHTS. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF THE UNITED STATES. Use, duplication, or disclosure of any data and computer software by the U.S. Government is subject to restrictions, as applicable, set forth in FAR Section 52.227-14, DFARS 252.227-7013,DFARS 227.227-7014, DFARS 252.227-7015, and DFARS 252.227-7025, as amended from time to time. Contractor/Manufacturer is BMC Software, Inc., 2101 CityWest Blvd., Houston, TX 77042-2827, USA. Any contract notices should be sent to this address.

  • Page 40 of 40 Susan E. Miller BMCS:CE

    MISCELLANEOUS TERMS. This Agreement constitutes the entire agreement between You and BMC relating to the matters covered hereby, and supersedes any prior or contemporaneous negotiations or agreements, whether oral or written, concerning the BMC Modules and any related subject matter. This Agreement may be modified only in a mutually signed, whether in writing or electronic, agreement between You and BMC. Neither Developer nor You may assign this Agreement or any rights granted by this Agreement to a successor, except in the event of merger, consolidation, or sale of all or substantially all of Your assets. Should any provision of this Agreement be invalid, or unenforceable, the remainder of the provisions will remain in effect. The parties have agreed that this Agreement and the documents related thereto be drawn up in the English language. Les parties exigent que la prsente convention ainsi que les documents qui sy rattachent soient rdigs en anglais. BY OPENING TTHE PACKAGE, INSTALLING, PRESSING AGREE OR YES OR USING THE BMC MODULES, YOU ACKNOWLEDGE AND AGREE THAT YOUR AUTHORIZED REPRESENTATIVE HAS READ THIS AGREEMENT AND THAT YOU INTEND TO BE BOUND HEREBY, AS IF YOUR AUTHORIZED REPRESENTATIVE HAD SIGNED THIS AGREEMENT IN WRITING. THE INDIVIDUAL EXECUTING THIS AGREEMENT WARRANTS THAT HE OR SHE HAS THE AUTHORITY TO ACCEPT THE TERMS OF THIS AGREEMENT FOR YOU AND ON HIS OR HER OWN BEHALF. v.02.05.04