Whamcloud - gitweb
LUDOC-11 typos: Fix references to unknown lustre versions
[doc/manual.git] / LustreMonitoring.xml
1 <?xml version='1.0' encoding='UTF-8'?><chapter xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en-US" xml:id="lustremonitoring">
2   <title xml:id="lustremonitoring.title">Monitoring a Lustre File System</title>
3   <para>This chapter provides information on monitoring a Lustre file system and includes the
4     following sections:</para>
5   <itemizedlist>
6     <listitem>
7       <para><xref linkend="dbdoclet.50438273_18711"/>Lustre Changelogs</para>
8     </listitem>
9     <listitem>
10       <para><xref linkend="dbdoclet.jobstats"/>Lustre Jobstats</para>
11     </listitem>
12     <listitem>
13       <para><xref linkend="dbdoclet.50438273_81684"/>Lustre Monitoring Tool</para>
14     </listitem>
15     <listitem>
16       <para><xref linkend="dbdoclet.50438273_80593"/>CollectL</para>
17     </listitem>
18     <listitem>
19       <para><xref linkend="dbdoclet.50438273_44185"/>Other Monitoring Options</para>
20     </listitem>
21   </itemizedlist>
22   <section xml:id="dbdoclet.50438273_18711">
23       <title><indexterm><primary>change logs</primary><see>monitoring</see></indexterm>
24 <indexterm><primary>monitoring</primary></indexterm>
25 <indexterm><primary>monitoring</primary><secondary>change logs</secondary></indexterm>
26
27 Lustre Changelogs</title>
28     <para>The changelogs feature records events that change the file system namespace or file metadata. Changes such as file creation, deletion, renaming, attribute changes, etc. are recorded with the target and parent file identifiers (FIDs), the name of the target, and a timestamp. These records can be used for a variety of purposes:</para>
29     <itemizedlist>
30       <listitem>
31         <para>Capture recent changes to feed into an archiving system.</para>
32       </listitem>
33       <listitem>
34         <para>Use changelog entries to exactly replicate changes in a file system mirror.</para>
35       </listitem>
36       <listitem>
37         <para>Set up &quot;watch scripts&quot; that take action on certain events or directories.</para>
38       </listitem>
39       <listitem>
40         <para>Maintain a rough audit trail (file/directory changes with timestamps, but no user information).</para>
41       </listitem>
42     </itemizedlist>
43     <para>Changelogs record types are:</para>
44     <informaltable frame="all">
45       <tgroup cols="2">
46         <colspec colname="c1" colwidth="50*"/>
47         <colspec colname="c2" colwidth="50*"/>
48         <thead>
49           <row>
50             <entry>
51               <para><emphasis role="bold">Value</emphasis></para>
52             </entry>
53             <entry>
54               <para><emphasis role="bold">Description</emphasis></para>
55             </entry>
56           </row>
57         </thead>
58         <tbody>
59           <row>
60             <entry>
61               <para> MARK</para>
62             </entry>
63             <entry>
64               <para> Internal recordkeeping</para>
65             </entry>
66           </row>
67           <row>
68             <entry>
69               <para> CREAT</para>
70             </entry>
71             <entry>
72               <para> Regular file creation</para>
73             </entry>
74           </row>
75           <row>
76             <entry>
77               <para> MKDIR</para>
78             </entry>
79             <entry>
80               <para> Directory creation</para>
81             </entry>
82           </row>
83           <row>
84             <entry>
85               <para> HLINK</para>
86             </entry>
87             <entry>
88               <para> Hard link</para>
89             </entry>
90           </row>
91           <row>
92             <entry>
93               <para> SLINK</para>
94             </entry>
95             <entry>
96               <para> Soft link</para>
97             </entry>
98           </row>
99           <row>
100             <entry>
101               <para> MKNOD</para>
102             </entry>
103             <entry>
104               <para> Other file creation</para>
105             </entry>
106           </row>
107           <row>
108             <entry>
109               <para> UNLNK</para>
110             </entry>
111             <entry>
112               <para> Regular file removal</para>
113             </entry>
114           </row>
115           <row>
116             <entry>
117               <para> RMDIR</para>
118             </entry>
119             <entry>
120               <para> Directory removal</para>
121             </entry>
122           </row>
123           <row>
124             <entry>
125               <para> RNMFM</para>
126             </entry>
127             <entry>
128               <para> Rename, original</para>
129             </entry>
130           </row>
131           <row>
132             <entry>
133               <para> RNMTO</para>
134             </entry>
135             <entry>
136               <para> Rename, final</para>
137             </entry>
138           </row>
139           <row>
140             <entry>
141               <para> IOCTL</para>
142             </entry>
143             <entry>
144               <para> ioctl on file or directory</para>
145             </entry>
146           </row>
147           <row>
148             <entry>
149               <para> TRUNC</para>
150             </entry>
151             <entry>
152               <para> Regular file truncated</para>
153             </entry>
154           </row>
155           <row>
156             <entry>
157               <para> SATTR</para>
158             </entry>
159             <entry>
160               <para> Attribute change</para>
161             </entry>
162           </row>
163           <row>
164             <entry>
165               <para> XATTR</para>
166             </entry>
167             <entry>
168               <para> Extended attribute change</para>
169             </entry>
170           </row>
171           <row>
172             <entry>
173               <para> UNKNW</para>
174             </entry>
175             <entry>
176               <para> Unknown operation</para>
177             </entry>
178           </row>
179         </tbody>
180       </tgroup>
181     </informaltable>
182     <para>FID-to-full-pathname and pathname-to-FID functions are also included to map target and parent FIDs into the file system namespace.</para>
183     <section remap="h3">
184       <title><indexterm><primary>monitoring</primary><secondary>change logs</secondary></indexterm>
185 Working with Changelogs</title>
186       <para>Several commands are available to work with changelogs.</para>
187       <section remap="h5">
188         <title>
189           <literal>lctl changelog_register</literal>
190         </title>
191         <para>Because changelog records take up space on the MDT, the system administration must register changelog users. The registrants specify which records they are &quot;done with&quot;, and the system purges up to the greatest common record.</para>
192         <para>To register a new changelog user, run:</para>
193         <screen>lctl --device /dev/<replaceable>mdt_device</replaceable> changelog_register
194 </screen>
195         <para>Changelog entries are not purged beyond a registered user&apos;s set point (see <literal>lfs changelog_clear</literal>).</para>
196       </section>
197       <section remap="h5">
198         <title>
199           <literal>lfs changelog</literal>
200         </title>
201         <para>To display the metadata changes on an MDT (the changelog records), run:</para>
202         <screen>lfs changelog <replaceable>fsname</replaceable>-<replaceable>MDTnumber</replaceable> [startrec [endrec]] </screen>
203         <para>It is optional whether to specify the start and end records.</para>
204         <para>These are sample changelog records:</para>
205         <screen>2 02MKDIR 4298396676 0x0 t=[0x200000405:0x15f9:0x0] p=[0x13:0x15e5a7a3:0x0]\
206  pics 
207 3 01CREAT 4298402264 0x0 t=[0x200000405:0x15fa:0x0] p=[0x200000405:0x15f9:0\
208 x0] chloe.jpg 
209 4 06UNLNK 4298404466 0x0 t=[0x200000405:0x15fa:0x0] p=[0x200000405:0x15f9:0\
210 x0] chloe.jpg 
211 5 07RMDIR 4298405394 0x0 t=[0x200000405:0x15f9:0x0] p=[0x13:0x15e5a7a3:0x0]\
212  pics </screen>
213       </section>
214       <section remap="h5">
215         <title>
216           <literal>lfs changelog_clear</literal>
217         </title>
218         <para>To clear old changelog records for a specific user (records that the user no longer needs), run:</para>
219         <screen>lfs changelog_clear <replaceable>mdt_name</replaceable> <replaceable>userid</replaceable> <replaceable>endrec</replaceable></screen>
220         <para>The <literal>changelog_clear</literal> command indicates that changelog records previous to <replaceable>endrec</replaceable> are no longer of interest to a particular user <replaceable>userid</replaceable>, potentially allowing the MDT to free up disk space. An <literal><replaceable>endrec</replaceable></literal> value of 0 indicates the current last record. To run <literal>changelog_clear</literal>, the changelog user must be registered on the MDT node using <literal>lctl</literal>.</para>
221         <para>When all changelog users are done with records &lt; X, the records are deleted.</para>
222       </section>
223       <section remap="h5">
224         <title>
225           <literal>lctl changelog_deregister</literal>
226         </title>
227         <para>To deregister (unregister) a changelog user, run:</para>
228         <screen>lctl --device <replaceable>mdt_device</replaceable> changelog_deregister <replaceable>userid</replaceable>       </screen>
229         <para> <literal>changelog_deregister cl1</literal> effectively does a <literal>changelog_clear cl1 0</literal> as it deregisters.</para>
230       </section>
231     </section>
232     <section remap="h3">
233       <title>Changelog Examples</title>
234       <para>This section provides examples of different changelog commands.</para>
235       <section remap="h5">
236         <title>Registering a Changelog User</title>
237         <para>To register a new changelog user for a device (<literal>lustre-MDT0000</literal>):</para>
238         <screen># lctl --device lustre-MDT0000 changelog_register
239 lustre-MDT0000: Registered changelog userid &apos;cl1&apos;</screen>
240       </section>
241       <section remap="h5">
242         <title>Displaying Changelog Records</title>
243         <para>To display changelog records on an MDT (<literal>lustre-MDT0000</literal>):</para>
244         <screen>$ lfs changelog lustre-MDT0000
245 1 00MARK  19:08:20.890432813 2010.03.24 0x0 t=[0x10001:0x0:0x0] p=[0:0x0:0x\
246 0] mdd_obd-lustre-MDT0000-0 
247 2 02MKDIR 19:10:21.509659173 2010.03.24 0x0 t=[0x200000420:0x3:0x0] p=[0x61\
248 b4:0xca2c7dde:0x0] mydir 
249 3 14SATTR 19:10:27.329356533 2010.03.24 0x0 t=[0x200000420:0x3:0x0] 
250 4 01CREAT 19:10:37.113847713 2010.03.24 0x0 t=[0x200000420:0x4:0x0] p=[0x20\
251 0000420:0x3:0x0] hosts </screen>
252         <para>Changelog records include this information:</para>
253         <screen>rec# 
254 operation_type(numerical/text) 
255 timestamp 
256 datestamp 
257 flags 
258 t=target_FID 
259 p=parent_FID 
260 target_name</screen>
261         <para>Displayed in this format:</para>
262         <screen>rec# operation_type(numerical/text) timestamp datestamp flags t=target_FID \
263 p=parent_FID target_name</screen>
264         <para>For example:</para>
265         <screen>4 01CREAT 19:10:37.113847713 2010.03.24 0x0 t=[0x200000420:0x4:0x0] p=[0x20\
266 0000420:0x3:0x0] hosts</screen>
267       </section>
268       <section remap="h5">
269         <title>Clearing Changelog Records</title>
270         <para>To notify a device that a specific user (<literal>cl1</literal>) no longer needs records (up to and including 3):</para>
271         <screen>$ lfs changelog_clear  lustre-MDT0000 cl1 3</screen>
272         <para>To confirm that the <literal>changelog_clear</literal> operation was successful, run <literal>lfs changelog</literal>; only records after id-3 are listed:</para>
273         <screen>$ lfs changelog lustre-MDT0000
274 4 01CREAT 19:10:37.113847713 2010.03.24 0x0 t=[0x200000420:0x4:0x0] p=[0x20\
275 0000420:0x3:0x0] hosts</screen>
276       </section>
277       <section remap="h5">
278         <title>Deregistering a Changelog User</title>
279         <para>To deregister a changelog user (<literal>cl1</literal>) for a specific device (<literal>lustre-MDT0000</literal>):</para>
280         <screen># lctl --device lustre-MDT0000 changelog_deregister cl1
281 lustre-MDT0000: Deregistered changelog user &apos;cl1&apos;</screen>
282         <para>The deregistration operation clears all changelog records for the specified user (<literal>cl1</literal>).</para>
283         <screen>$ lfs changelog lustre-MDT0000
284 5 00MARK  19:13:40.858292517 2010.03.24 0x0 t=[0x40001:0x0:0x0] p=[0:0x0:0x\
285 0] mdd_obd-lustre-MDT0000-0 
286 </screen>
287         <note>
288           <para>MARK records typically indicate changelog recording status changes.</para>
289         </note>
290       </section>
291       <section remap="h5">
292         <title>Displaying the Changelog Index and Registered Users</title>
293         <para>To display the current, maximum changelog index and registered changelog users for a specific device (<literal>lustre-MDT0000</literal>):</para>
294         <screen># lctl get_param  mdd.lustre-MDT0000.changelog_users 
295 mdd.lustre-MDT0000.changelog_users=current index: 8 
296 ID    index 
297 cl2   8
298 </screen>
299       </section>
300       <section remap="h5">
301         <title>Displaying the Changelog Mask</title>
302         <para>To show the current changelog mask on a specific device (<literal>lustre-MDT0000</literal>):</para>
303         <screen># lctl get_param  mdd.lustre-MDT0000.changelog_mask 
304
305 mdd.lustre-MDT0000.changelog_mask= 
306 MARK CREAT MKDIR HLINK SLINK MKNOD UNLNK RMDIR RNMFM RNMTO OPEN CLOSE IOCTL\
307  TRUNC SATTR XATTR HSM 
308 </screen>
309       </section>
310       <section remap="h5">
311         <title>Setting the Changelog Mask</title>
312         <para>To set the current changelog mask on a specific device (<literal>lustre-MDT0000</literal>):</para>
313         <screen># lctl set_param mdd.lustre-MDT0000.changelog_mask=HLINK 
314 mdd.lustre-MDT0000.changelog_mask=HLINK 
315 $ lfs changelog_clear lustre-MDT0000 cl1 0 
316 $ mkdir /mnt/lustre/mydir/foo
317 $ cp /etc/hosts /mnt/lustre/mydir/foo/file
318 $ ln /mnt/lustre/mydir/foo/file /mnt/lustre/mydir/myhardlink
319 </screen>
320         <para>Only item types that are in the mask show up in the changelog.</para>
321         <screen>$ lfs changelog lustre-MDT0000
322 9 03HLINK 19:19:35.171867477 2010.03.24 0x0 t=[0x200000420:0x6:0x0] p=[0x20\
323 0000420:0x3:0x0] myhardlink
324 </screen>
325       </section>
326     </section>
327   </section>
328   <section xml:id="dbdoclet.jobstats">
329       <title><indexterm><primary>jobstats</primary><see>monitoring</see></indexterm>
330 <indexterm><primary>monitoring</primary></indexterm>
331 <indexterm><primary>monitoring</primary><secondary>jobstats</secondary></indexterm>
332
333 Lustre Jobstats</title>
334     <para>The Lustre jobstats feature is available starting in Lustre software release 2.3. It
335       collects file system operation statistics for the jobs running on Lustre clients, and exposes
336       them via procfs on the server. Job schedulers known to be able to work with jobstats include:
337       SLURM, SGE, LSF, Loadleveler, PBS and Maui/MOAB.</para>
338     <para>Since jobstats is implemented in a scheduler-agnostic manner, it is likely that it will be
339       able to work with other schedulers also.</para>
340     <section remap="h3">
341       <title><indexterm><primary>monitoring</primary><secondary>jobstats</secondary></indexterm>
342 Enable/Disable Jobstats</title>
343       <para>Jobstats are disabled by default.  The current state of jobstats can be verified by checking <literal>lctl get_param jobid_var</literal> on a client:</para>
344       <screen>
345 $ lctl get_param jobid_var
346 jobid_var=disable
347       </screen>
348       <para>The Lustre jobstats code extracts the job identifier from an environment variable set by
349         the scheduler when the job is started. To enable jobstats, specify the
350           <literal>jobid_var</literal> to name the environment variable set by the scheduler. For
351         example, SLURM sets the <literal>SLURM_JOB_ID</literal> environment variable with the unique
352         job ID on each client. To permanently enable jobstats on the <literal>testfs</literal> file
353         system:</para>
354       <screen>$ lctl conf_param testfs.sys.jobid_var=SLURM_JOB_ID</screen>
355       <para>The following table shows the environment variables which are set by various job schedulers.
356         Set <literal>jobid_var</literal> to the value for your job scheduler to collect statistics on a
357         per job basis.</para>
358     <informaltable frame="all">
359       <tgroup cols="2">
360         <colspec colname="c1" colwidth="50*"/>
361         <colspec colname="c2" colwidth="50*"/>
362         <thead>
363           <row>
364             <entry>
365               <para><emphasis role="bold">Job Scheduler</emphasis></para>
366             </entry>
367             <entry>
368               <para><emphasis role="bold">Environment Variable</emphasis></para>
369             </entry>
370           </row>
371         </thead>
372         <tbody>
373           <row>
374             <entry>
375               <para>Simple Linux Utility for Resource Management (SLURM)</para>
376             </entry>
377             <entry>
378               <para>SLURM_JOB_ID</para>
379             </entry>
380           </row>
381           <row>
382             <entry>
383               <para>Sun Grid Engine (SGE)</para>
384             </entry>
385             <entry>
386               <para>JOB_ID</para>
387             </entry>
388           </row>
389           <row>
390             <entry>
391               <para>Load Sharing Facility (LSF)</para>
392             </entry>
393             <entry>
394               <para>LSB_JOBID</para>
395             </entry>
396           </row>
397           <row>
398             <entry>
399               <para>Loadleveler</para>
400             </entry>
401             <entry>
402               <para>LOADL_STEP_ID</para>
403             </entry>
404           </row>
405           <row>
406             <entry>
407               <para>Portable Batch Scheduler (PBS)/MAUI</para>
408             </entry>
409             <entry>
410               <para>PBS_JOBID</para>
411             </entry>
412           </row>
413           <row>
414             <entry>
415               <para>Cray Application Level Placement Scheduler (ALPS)</para>
416             </entry>
417             <entry>
418               <para>ALPS_APP_ID</para>
419             </entry>
420           </row>
421         </tbody>
422       </tgroup>
423     </informaltable>
424     <para>There are two special values for <literal>jobid_var</literal>: <literal>disable</literal>
425         and <literal>procname_uid</literal>.  To disable jobstats, specify <literal>jobid_var</literal>
426         as <literal>disable</literal>:</para>
427     <screen>$ lctl conf_param testfs.sys.jobid_var=disable</screen>
428     <para>To track job stats per process name and user ID (for debugging, or if no job scheduler is in use),
429         specify <literal>jobid_var</literal> as <literal>procname_uid</literal>:</para>
430     <screen>$ lctl conf_param testfs.sys.jobid_var=procname_uid</screen>
431     </section>
432     <section remap="h3">
433       <title><indexterm><primary>monitoring</primary><secondary>jobstats</secondary></indexterm>
434 Check Job Stats</title>
435     <para>Metadata operation statistics are collected on MDTs. These statistics can be accessed for
436         all file systems and all jobs on the MDT via the <literal>lctl get_param
437           mdt.*.job_stats</literal>. For example, clients running with
438           <literal>jobid_var=procname_uid</literal>:</para>
439     <screen>
440 $ lctl get_param mdt.*.job_stats
441 job_stats:
442 - job_id:          bash.0
443   snapshot_time:   1352084992
444   open:            { samples:           2, unit:  reqs }
445   close:           { samples:           2, unit:  reqs }
446   mknod:           { samples:           0, unit:  reqs }
447   link:            { samples:           0, unit:  reqs }
448   unlink:          { samples:           0, unit:  reqs }
449   mkdir:           { samples:           0, unit:  reqs }
450   rmdir:           { samples:           0, unit:  reqs }
451   rename:          { samples:           0, unit:  reqs }
452   getattr:         { samples:           3, unit:  reqs }
453   setattr:         { samples:           0, unit:  reqs }
454   getxattr:        { samples:           0, unit:  reqs }
455   setxattr:        { samples:           0, unit:  reqs }
456   statfs:          { samples:           0, unit:  reqs }
457   sync:            { samples:           0, unit:  reqs }
458   samedir_rename:  { samples:           0, unit:  reqs }
459   crossdir_rename: { samples:           0, unit:  reqs }
460 - job_id:          dd.0
461   snapshot_time:   1352085037
462   open:            { samples:           1, unit:  reqs }
463   close:           { samples:           1, unit:  reqs }
464   mknod:           { samples:           0, unit:  reqs }
465   link:            { samples:           0, unit:  reqs }
466   unlink:          { samples:           0, unit:  reqs }
467   mkdir:           { samples:           0, unit:  reqs }
468   rmdir:           { samples:           0, unit:  reqs }
469   rename:          { samples:           0, unit:  reqs }
470   getattr:         { samples:           0, unit:  reqs }
471   setattr:         { samples:           0, unit:  reqs }
472   getxattr:        { samples:           0, unit:  reqs }
473   setxattr:        { samples:           0, unit:  reqs }
474   statfs:          { samples:           0, unit:  reqs }
475   sync:            { samples:           2, unit:  reqs }
476   samedir_rename:  { samples:           0, unit:  reqs }
477   crossdir_rename: { samples:           0, unit:  reqs }
478     </screen>
479     <para>Data operation statistics are collected on OSTs. Data operations statistics can be accessed via <literal>lctl get_param obdfilter.*.job_stats</literal>, for example:</para>
480     <screen>
481 $ lctl get_param obdfilter.*.job_stats
482 job_stats:
483 - job_id:          bash.0
484   snapshot_time:   1352085025
485   read:            { samples:           0, unit: bytes, min:       0, max:       0, sum:               0 }
486   write:           { samples:           1, unit: bytes, min:       4, max:       4, sum:               4 }
487   setattr:         { samples:           0, unit:  reqs }
488   punch:           { samples:           0, unit:  reqs }
489   sync:            { samples:           0, unit:  reqs }
490     </screen>
491     </section>
492     <section remap="h3">
493       <title><indexterm><primary>monitoring</primary><secondary>jobstats</secondary></indexterm>
494 Clear Job Stats</title>
495     <para>Accumulated job statistics can be reset by writing proc file <literal>job_stats</literal>.</para>
496     <para>Clear statistics for all jobs on the local node:</para>
497     <screen>$ lctl set_param obdfilter.*.job_stats=clear</screen>
498     <para>Clear statistics for job 'dd.0' on lustre-MDT0000:</para>
499     <screen>$ lctl set_param mdt.lustre-MDT0000.job_stats=clear</screen>
500     </section>
501     <section remap="h3">
502       <title><indexterm><primary>monitoring</primary><secondary>jobstats</secondary></indexterm>
503 Configure Auto-cleanup Interval</title>
504     <para>By default, if a job is inactive for 600 seconds (10 minutes) statistics for this job will be dropped. This expiration value can be changed temporarily via:</para>
505     <screen>$ lctl set_param *.*.job_cleanup_interval={max_age}</screen>
506     <para>It can also be changed permanently, for example to 700 seconds via:</para>
507     <screen>$ lctl conf_param testfs.mdt.job_cleanup_interval=700</screen>
508     <para>The <literal>job_cleanup_interval</literal> can be set as 0 to disable the auto-cleanup. Note that if auto-cleanup of Jobstats is disabled, then all statistics will be kept in memory forever, which may eventually consume all memory on the servers. In this case, any monitoring tool should explicitly clear individual job statistics as they are processed, as shown above.</para>
509     </section>
510   </section>
511   <section xml:id="dbdoclet.50438273_81684">
512     <title><indexterm>
513         <primary>monitoring</primary>
514         <secondary>Lustre Monitoring Tool</secondary>
515       </indexterm> Lustre Monitoring Tool (LMT)</title>
516     <para>The Lustre Monitoring Tool (LMT) is a Python-based, distributed system that provides a
517         <literal>top</literal>-like display of activity on server-side nodes (MDS, OSS and portals
518       routers) on one or more Lustre file systems. It does not provide support for monitoring
519       clients. For more information on LMT, including the setup procedure, see:</para>
520     <para><link xl:href="http://code.google.com/p/lmt/"
521       >https://github.com/chaos/lmt/wiki</link></para>
522     <para>LMT questions can be directed to:</para>
523     <para><link xl:href="mailto:lmt-discuss@googlegroups.com">lmt-discuss@googlegroups.com</link></para>
524   </section>
525   <section xml:id="dbdoclet.50438273_80593">
526     <title>
527       <literal>CollectL</literal>
528     </title>
529     <para><literal>CollectL</literal> is another tool that can be used to monitor a Lustre file
530       system. You can run <literal>CollectL</literal> on a Lustre system that has any combination of
531       MDSs, OSTs and clients. The collected data can be written to a file for continuous logging and
532       played back at a later time. It can also be converted to a format suitable for
533       plotting.</para>
534     <para>For more information about <literal>CollectL</literal>, see:</para>
535     <para><link xl:href="http://collectl.sourceforge.net">http://collectl.sourceforge.net</link></para>
536     <para>Lustre-specific documentation is also available. See:</para>
537     <para><link xl:href="http://collectl.sourceforge.net/Tutorial-Lustre.html">http://collectl.sourceforge.net/Tutorial-Lustre.html</link></para>
538   </section>
539   <section xml:id="dbdoclet.50438273_44185">
540     <title><indexterm><primary>monitoring</primary><secondary>additional tools</secondary></indexterm>
541 Other Monitoring Options</title>
542     <para>A variety of standard tools are available publicly including the following:<itemizedlist>
543         <listitem>
544           <para><literal>lltop</literal> - Lustre load monitor with batch scheduler integration.
545               <link xmlns:xlink="http://www.w3.org/1999/xlink"
546               xlink:href="https://github.com/jhammond/lltop"
547               >https://github.com/jhammond/lltop</link></para>
548         </listitem>
549         <listitem>
550           <para><literal>tacc_stats</literal> - A job-oriented system monitor, analyzation, and
551             visualization tool that probes Lustre interfaces and collects statistics. <link
552               xmlns:xlink="http://www.w3.org/1999/xlink"
553               xlink:href="https://github.com/jhammond/tacc_stats"/></para>
554         </listitem>
555         <listitem>
556           <para><literal>xltop</literal> - A continuous Lustre monitor with batch scheduler
557             integation. <link xmlns:xlink="http://www.w3.org/1999/xlink"
558               xlink:href="https://github.com/jhammond/xltop"/></para>
559         </listitem>
560       </itemizedlist></para>
561     <para>Another option is to script a simple monitoring solution that looks at various reports
562       from <literal>ipconfig</literal>, as well as the <literal>procfs</literal> files generated by
563       the Lustre software.</para>
564   </section>
565 </chapter>