blob: 7aa2d6e7e446a8debe0503a70c71b53cc004df6e [file] [log] [blame]
<?xml version="1.0"?>
<!DOCTYPE document [
<!ENTITY project SYSTEM "project.xml">
]>
<document url="status.html">
&project;
<properties>
<author email="rjung@apache.org">Rainer Jung</author>
<title>Status Worker Reference</title>
</properties>
<body>
<section name="Introduction">
<br/>
<p>
Tomcat Connectors has a special type of worker, the so-called status worker.
The status worker does not forward requests to Tomcat instances. Instead it allows
to retrieve status and configuration information at runtime,
and furthermore to change many configuration items dynamically. This can be done
via a simple embedded web interface.
</p>
<p>
The status worker is especially powerful, when used together with load balancing workers.
The dynamic management features of load balancers in combination with the status worker
are a good reason, to use load balancer workers on top of ajp13 workers, even if there would
be only one member worker in the load balancer.
</p>
<p>
This document does not explain the HTML user interface of the status worker.
Until now it is very simple, so just go ahead and use it. This doc instead
tries to explain the less obvious features of the status worker. We also will give a
complete coverage of the various request parameters and their meaning, so that you can
include the status worker in your automation scripts.
</p>
<p>
The documentation of the status worker starts with <b>jk 1.2.20</b>
</p>
</section>
<section name="Usage Patterns">
<br/>
<subsection name="Actions">
<br/>
<p>
The status worker knows about six actions.
<ul>
<li>
<b>list</b>: lists the configurations and runtime information of all configured workers.
The output will be grouped by global information first (version data), then load balancer
information, after that AJP worker information and finally the legend. For load balancers,
there will be a summary part, and after that details for each member worker. For all workers,
we also include the URL mappings (forward definitions).
</li>
<li>
<b>show</b>: the same as list, but only shows data for one chosen worker
</li>
<li>
<b>edit</b>: produces a form to edit configuration data for a chosen worker. There is a
special subtype of "edit", that makes it easy to change one attribute for all members of
a load balancer, e.g. their activation state.
</li>
<li>
<b>update</b>: commit changes made in an edit form. <b>Caution</b>: the changes will not be
persisted to the configuration files. As soon as your restart your web server, all changes
made through the status worker will be lost! On the other hand, the changes done by the status
worker will be applied during runtime without a restart of the web server.
</li>
<li>
<b>reset</b>: reset all runtime information for a load balancer
or one of its members.
</li>
<li>
<b>recover</b>: Mark a member of a load balancer, that is in error state, for immediate recovery.
</li>
<li>
<b>version</b>: only show version information of the web server and the JK software
</li>
</ul>
</p>
</subsection>
<subsection name="Output Format">
<br/>
<p>
For most actions you can choose between 4 output formats.
<ul>
<li>
<b>HTML</b>: Used interactively with a browser
</li>
<li>
<b>XML</b>: Mostly useful for automation, when your scripting environment is XML friendly.
This format has rich structure information, but does not work line based, so you would really
like to use it together with XML tools.
</li>
<li>
<b>Properties</b>: This format is a line based format, that conforms to the rules of Java
property files. Most structure information is contained in the hierarchical key. For information,
that is of configuration nature, the format should produce lines very similar to the ones you can
use in workers.properties. It will not produce a complete configuration file!
</li>
<li>
<b>Text</b>: A simple textual output format.
</li>
</ul>
The "edit" action does only make sense for the HTML output type.
</p>
</subsection>
<subsection name="User Interface Features">
<br/>
<p>
In the HTML view, there is an <b>automatic refresh</b> feature, implemented via the meta refresh
option of HTML. Once you start the automatic refresh, the UI will will respect it for all actions
except edit, update and maintain. Even if you navigate through one of those, the automatic refresh
will start again as soon as you come back to one of the other actions.
</p>
<p>
Many parts of the HTML page can be minimized, if they are not interesting for you. There are a couple
of "Hide" links, which will collapse parts of the information. The feature exists for the following
blocks of information:
<ul>
<li>
<b>Legend</b>: Do not show the legend for the information presented in "list" and "show" actions
</li>
<li>
<b>Load Balancer Workers</b>: Do not show workers of type "lb"
</li>
<li>
<b>AJP Workers</b>: Do not show workers of type ajp
</li>
<li>
<b>Member Workers</b>: Do not show detailed information concerning each member of load balancers
</li>
</ul>
</p>
</subsection>
<subsection name="Special Considerations concerning URL Maps and Virtual Hosts">
<br/>
<p>
The Apache module mod_jk makes use of the internal Apache httpd infrastructure concerning
virtual hosts. The downside of this is, that the status worker can only show URL maps, for
the virtual host it is defined in. It is not able to reach the configuration objects
for other virtual hosts. Of course you can define a status worker in any virtual host you
are using. All information presented apart from the URL maps will be the same, independant
of the virtual host the status worker has been called in.
</p>
</subsection>
<subsection name="Logging">
<br/>
<p>
The status worker will log changes made to the configuration with log level "info" to the usual
JK log file. Invalid requests will be logged with log level "warn". If you want to report some
broken behaviour, log file content of level "debug" or even "trace" will be useful.
</p>
</subsection>
</section>
<section name="Configuration">
<br/>
<subsection name="Basic Configuration">
<br/>
<p>
The basic configuration of a status worker is very similar to that of a usual ajp worker.
You need to specify a name for the worker, and the URLs you want to map to it. The first
part of the configuration happens in the workers.properties file. We define a worker named
mystatus of type status:
<source>
worker.list=mystatus
worker.mystatus.type=status
</source>
Then we define a URL, which should be mapped to this worker, i.e. the URL we use
to reach the functionality of the status worker. You can use any method mod_jk supports
for the web server of your choice. Possibilities are maps inside uriworkermap.properties,
an additional mount attribute in workers.properties, or in Apache JkMount. Here's an
example for a uriworkermap.properties line:
<source>
/private/admin/mystatus=mystatus
</source>
The URI pattern is case sensitive.
</p>
<p>
As you will learn in the following sections, the status worker is very powerful. You should
use the usual authentication and authorisation methods of your web server to secure this URL.
</p>
<p>
You can also define multiple instances of the status worker, by using different names and URL mappings.
For instance you might want to configure them individually
and then allow special groups of people to use them
</p>
</subsection>
<subsection name="Output Customization">
<br/>
<p>
There are a couple of attributes for the workers.properties entries, which allow to customize
various aspects of the output of the status worker.
</p>
<p>
The attribute <b>css</b> can be set to the URL of a stylesheet:
<source>
worker.mystatus.css=/private/admin/static/mystatus.css
</source>
When writing HTML output, the status worker then includes the line
<source>
<link rel="stylesheet" type="text/css" href="/private/admin/static/mystatus.css" />
</source>
There is no sample stylesheet included with the mod_jk release, and by default the attribute css
is empty, so no stylesheet reference will be included in the pages. The HTML code
of the status worker output pages does not include any class attributes. If you like to contribute a
stylesheet or improvements to the HTML layout, please contact us on the tomcat developers list.
</p>
<p>
The properties output format can be customized via the attribute <b>prefix</b>. The names of all
properties the status worker does output, will begin with this prefix. The default is "worker".
</p>
<p>
Several attributes influence the format when writing XML output.
The attribute <b>ns</b> allows to set a namespace prefix, that will be used for every status worker+element.
The default is "jk:". Setting it to "-" disables the namesspace prefix.
</p>
<p>
With the attribute xmlns you can map the prefix to a namespace URL. The default value
is xmlns:jk="http://tomcat.apache.org". Setting it to "-" disables the output of the URL.
</p>
<p>
Finally you can specify an XML document type via the attribute doctype. The specified string will
be inserted at the beginning of the document, directly after the xml header. The default is empty.
</p>
</subsection>
<subsection name="Securing Access">
<br/>
<p>
We urge you to use the builtin access control features of your web server to control
access to the status worker URLs you have chosen. Nevertheless two configuration
attributes of status workers are helpful. The attribute "read_only" disables all features of
the status worker, that can be used to change configurations or runtime status of the other workers.
A read_only status worker will not allow access to the edit, update, reset or recover actions.
The default value is "False", ie. read/write. To enable read_only you need to set it to "True".
</p>
<p>
You could configure two status workers, one has read_only and will be made available to a larger
admin group, the other one will be used fully featured, but only by fewer people:
<source>
worker.list=jk-watch
worker.jk-watch.type=status
worker.jk-watch.read_only=True
worker.jk-watch.mount=/user/status/jk
worker.list=jk-manage
worker.jk-manage.type=status
worker.jk-manage.mount=/admin/status/jk
</source>
Starting with version 1.2.21, a read/write status worker can also be switched temporarily
into read-only mode by the user via a link in the HTML GUI. The user can always switch it
back to read/write. Only a status worker configured as read-only via the "read_only" attribute
is completely safe from applying any changes.
</p>
<p>
The other attribute you can use is <b>user</b>. By default this list is empty, which means
no limit on the users. You can set "user" to a comma separated list of user names. If your
web server is configured such that it sends the user names with the request, the status worker
will check, if the name attached with the request is contained in it's "user" list.
</p>
<p>
The user list can be split over multiple occurences of the "user" attribute.
</p>
<p>
By default, the user names are matched case sensitively. Starting with version 1.2.21 you can set
the attribute <b>user_case_insensitive</b> to "True". Then the comparison will be made case insensitive.
</p>
</subsection>
<subsection name="Service Availability Rating">
<br/>
<p>
For load balancing workers the status worker shows some interesting overview information.
It categorizes the members of the load balancer into the classes "good", "bad" and degraded".
This feature can be combined with external escalation procedures. Depending on your global
system design and your operating practises your preferred categorization might vary.
</p>
<p>
The categorization is based on the activation state of the workers (active, disabled or stopped),
which is a pure configuration state, and the runtime state
(OK, N/A, busy, recovering, probing, forced recovery, error)
which only depends on the runtime situation.
</p>
<p>
By default the status worker groups into "good" all members, that have activation "active" and
runtime state not equal to "error". The "bad" group consists of the members, that have either activation
"stopped", or are in runtime state "error".
</p>
<p>
Workers that fit neither of the two groups, are considered to be "degraded".
</p>
<p>
You can define other rules for the grouping into good, bad and degraded.
The two attributes "good" and "bad" can be populated by a comma-separated list ob single characters or
dot-separated pairs. Each character stands for the first character of one of the possible states "active",
"disabled", "stopped", "ok", "na", "busy", "recovering" and "error". The additional states "probing"
and "forced recovery" are always rated equivalent to "recovering".
Comma-separated entries will be combined
with logical "or", if you combine a configuration and a runtime state with a dot. the are combined with logical
"and". So the default value for "good" is "a.o,a.n,a.b,a.r", for "bad" it is "e,s".
</p>
<p>
The status worker first tries to match against the "bad" definitions, if this doesn't succeed
it tries to macth against "good", and finally it choses "degarded", if no "bad" or "good" match
can be found.
</p>
</subsection>
</section>
<section name="Request Parameters">
<br/>
<p>
This section should help you building automation scripts based on the jk status
management interface. This interface is still not stable, we expect further
improvements in the next releases. It is well possible, that the request parameters
might change in an incompatible way. So be prepared to change you scripts when
updating to future versions.
</p>
<subsection name="Actions">
<br/>
<p>
The action is determined by the parameter <b>cmd</b>. It can have the values "list", "show",
"edit", "update", "reset", "recover" and "version". If you omit the "cmd" parameter,
the default "list" will be used.
All actions except for "list" and "refresh" need additional parameters.
</p>
</subsection>
<subsection name="Output Format">
<br/>
<p>
The format is determined by the parameter <b>mime</b>. It can have the values "html", "xml",
"txt" and "prop". If you omit the "mime" parameter, the default "html"
will be used. The action "edit" (the edit form) does only make sense for "mime=html".
</p>
</subsection>
<subsection name="Worker Selection">
<br/>
<p>
Actions that operate on a single worker need one or two additional parameters to select
this worker. The parameter <b>w</b> contains the name of the worker from the worker list.
If an action operates on a member (sub worker) of a load balancer, the parameter "w"
contains the name of the load balancer worker, and the additional parameter <b>sw</b> contains the
name of the sub worker.
</p>
</subsection>
<subsection name="Automatic Refresh">
<br/>
<p>
During automatic refresh, the parameter <b>re</b> contain the refresh interval in seconds.
If you omit this parameter, automatic refresh will be off.
</p>
</subsection>
<subsection name="Hide Options">
<br/>
<p>
The parameter <b>opt</b> contains a bit mask of activated options. The default is 0, so
by default no options are activated. The following options exist:
<ul>
<li>
<b>0x0001</b>: hide members of lb workers
</li>
<li>
<b>0x0002</b>: hide URL maps
</li>
<li>
<b>0x0004</b>: hide the legend
</li>
<li>
<b>0x0008</b>: hide load balancer workers
</li>
<li>
<b>0x0010</b>: hide ajp workers
</li>
<li>
<b>0x0020</b>: only allow read_only actions for a read/write status worker.
</li>
</ul>
</p>
</subsection>
<subsection name="Data Parameters for the standard Update Action">
<br/>
<p>
You can use the edit action with a final click to the update button, to change settings of workers.
But you can also make direct calls to the update action. The following request parameters
contain the configuration information, you want to change. First the list for load balancer workers:
<ul>
<li>
<b>lr</b>: retries (number)
</li>
<li>
<b>lt</b>: recover_time (seconds)
</li>
<li>
<b>ls</b>: sticky_session (0/f/n/off=off, 1/t/y/on=on; case insensitive)
</li>
<li>
<b>lf</b>: sticky_session_force (0/f/n/off=off, 1/t/y/on=on; case insensitive)
</li>
<li>
<b>lm</b>: method (0/r="Requests", 1/t="Traffic", 2/b="Busyness", 3/s="Sessions"; case insensitive, only first character is used)
</li>
<li>
<b>ll</b>: lock (0/o="Optimistic", 1/p="Pessimistic"; case insensitive, only first character is used)
</li>
</ul>
And now the list of parameters you can use to change settings for load balancer members:
<ul>
<li>
<b>wa</b>: activation flag (0/a="active", 1/d="disabled", 2/s="stopped"; case insensitive, only first character is used)
</li>
<li>
<b>wf</b>: load balancing factor (integer weight)
</li>
<li>
<b>wn</b>: route for use with sticky sessions (string)
</li>
<li>
<b>wr</b>: redirect to define simple failover rules (string)
</li>
<li>
<b>wc</b>: domain to tell JK about your replication design (string)
</li>
<li>
<b>wd</b>: distance to express preferences (integer)
</li>
</ul>
For the details of all parameters, we refer to the <a href="workers.html">workers.properties Reference</a>.
</p>
</subsection>
<subsection name="Aspect Editing for Load Balancer Members">
<br/>
<p>
You can use the edit action to edit all settings for a load balancer or for a
member of a load balancer respectively on one page. If you want to edit one
configuration aspect for all members of a load balancer simultaneously, this
will be triggered by the parameter <b>att</b>. The value of the parameter indicates,
which aspect you want to edit. The list is the same as in the previous section:
"wa", "wf", "wn", "wr", "wc" and "wd". But here you
need to put the name into the parameter "att", instead of using it as a request
parameter name.
</p>
<p>
The values of the common aspect for all the load balancer members will be given
in parameters named "val1", "val2", ....
</p>
</subsection>
</section>
</body>
</document>