Apache DTrace module
The Apache DTrace module (mod_dtrace) utilizes the hook framework to add DTrace probes to the Apache web server. These probes can be used to observe and correlate web server and system behavior, and allow easy access to numerous pieces of realtime Apache data. The module comes as as two files. The first file contains the C code required to hook the module into Apache. The second file is the probe definition file. mod_dtrace has been tested with the Apache source distribution (2.0.55) and the version of Apache that resides in /usr/apache2 on Solaris 10 servers. If you have any comments, suggestions, scripts or feedback, shoot me an E-mail.
Code and build instructions
The Apache DTrace module and a set of build instructions can be downloaded from the following site:
Scripts
The scripts on this page were created to monitor a running Apache process, and to provide some insight into the Apache request processing flow. The results in some cases may be slightly skewed, but the overall results should help web administrators understand what is happening with an Apache web server.
*** NOTE***
Due to some issues with the DTrace "#include" support, these scripts currently only work under SPARC Solaris (you can adjust the offsets in the scripts if you are interested in using them under x86 or x64 Solaris)
View HTTP Requests
$ viewreqs.pl -d 5 Timestamp GETs POSTs HEADs TRACEs 02:05:59 0 0 0 0 02:06:04 12 0 0 0 02:06:09 15 0 0 0 02:06:14 59 0 0 0 02:06:19 68 0 0 0 02:06:24 70 0 0 0
View HTTP Requests By HTTPD Process
$ viewreqsbyproc.d Execname Process Requests Processed httpd 19103 16 httpd 19152 17 httpd 19101 17 httpd 19102 19 httpd 19104 20 httpd 19105 20
View HTTP Requests By Browser Type
$ viewbrowsers.pl Sampling browser data for 60 seconds... Browser GETs POSTs HEADs TRACEs Firefox 34 0 0 0 Safari 20 0 0 0 Wget 7 0 0 0
View HTTP Requests By Virtual Server
$ viewserver.pl -d 60 Sampling virtual server data for 60 seconds... Server GETs POSTs HEADs TRACEs www.foo.com 101 0 0 0 www.bar.com 23 0 0 0
View HTTP Response Codes
$ responsecodes.d Sampling response code data (Ctrl-C to stop): Response Code Count 404 4 200 22
View HTTP Response Codes by file and URI
$ responsecodes.pl Response Code URI File Name 200 / /tmp/apache/htdocs/index.html.var 304 /apache_pb.gif /tmp/apache/htdocs/apache_pb.gif 200 / /tmp/apache/htdocs/index.html.var 200 /apache_pb.gif /tmp/apache/htdocs/apache_pb.gif 404 /favicon.ico /tmp/apache/htdocs/favicon.ico $ responsecodes.pl -c 404 Response Code URI File Name 404 /favicon.ico /tmp/apache/htdocs/favicon.ico 404 /favicon.ico /tmp/apache/htdocs/favicon.ico 404 /favicon.ico /tmp/apache/htdocs/favicon.ico 404 /favicon.ico /tmp/apache/htdocs/favicon.ico
View HTTP 301/302 redirects
$ viewredirects.pl Response Code URI Requested Redirect Sent To Client 301 /yikes http://192.168.1.3:8080/yikes2 301 /foo http://192.168.1.3:8080/bar 301 /bling http://192.168.1.3:8080/crunk
View request sizes in a quantized distribution
$ requestsize.d
dtrace: script 'requestsize.d' matched 1 probe
httpd 5549
value ------------- Distribution ------------- count
-1 | 0
0 |@@@@@@@@@@@@@@@@@@@@@@@@ 43
1 | 0
2 | 0
4 | 0
8 | 0
16 | 0
32 | 0
64 | 0
128 | 0
256 |@@@@ 8
512 | 0
1024 | 0
2048 |@@@@@@@@@@@@ 22
4096 | 0
View requests in a top-like display (similar to the apachetop C program)
$ apachetop.pl
21:12:39 Requests: 347 ( 69/sec) Bytes: 35349b (7069b/sec, 101b/request)
Requests: GETs: 347 POSTs: 0 HEADs: 0 TRACEs: 0
Responses: 1XX: 0 2XX: 301 3XX: 46 4XX: 0 5XX: 0
Requests Requests/Sec Bytes Sent URI
13 2.6 13312 /blah
6 1.2 0 /manual/ja/mod/directives.html
6 1.2 0 /manual/ru/mod/directives.html
6 1.2 0 /manual/de/mod/directives.html
6 1.2 0 /manual/en/mod/directives.html
6 1.2 0 /manual/es/mod/directives.html
6 1.2 0 /manual/ko/mod/directives.html
2 0.4 0 /manual/ja/mod/
2 0.4 0 /manual/es/mod/
2 0.4 0 /manual/de/mod/
2 0.4 0 /manual/ko/mod/
2 0.4 0 /manual/en/mod/
1 0.2 0 /manual/ja/mod/mod_negotiation.html
1 0.2 0 /manual/ja/mod/mod_isapi.html
1 0.2 0 /manual/ko/mod/mod_file_cache.html
1 0.2 344 /manual/ko/ru/mod/directives.html
1 0.2 0 /manual/ja/mod/mod_asis.html
1 0.2 0 /manual/es/mod/mod_autoindex.html
1 0.2 0 /manual/ru/mod/beos.html
1 0.2 0 /manual/ko/mod/mod_setenvif.html
View Apache module function processing time
$ apachemodulefunctime `pgrep httpd` mod_alias.so Tracing Apache Module mod_alias.so (Control-C to stop) Module Function Time mod_alias.so alias_matches 558679 mod_alias.so fixup_redir 623683 mod_alias.so translate_alias_redir 938919 mod_alias.so try_alias_list 1169778 Total Time: 3291059
View Apache module processing time
$ apachemoduleprof `pgrep httpd`
Started Apache Request Profiler (Control-C to stop...)
*** New connection ***
Connection start: 2005 Dec 10 19:56:39
Connection stop : 2005 Dec 10 19:56:54
Method URI Count
GET /apache_pb.gif 1
GET / 1
Module Processing Time
mod_actions.so 43093 ns
mod_expires.so 66941 ns
mod_dir.so 92026 ns
mod_speling.so 100357 ns
mod_log_forensic.so 102187 ns
mod_userdir.so 102598 ns
mod_vhost_alias.so 104377 ns
mod_info.so 108378 ns
mod_autoindex.so 110851 ns
mod_usertrack.so 117790 ns
mod_asis.so 134288 ns
mod_cern_meta.so 138016 ns
mod_cgi.so 138344 ns
mod_imap.so 142541 ns
mod_headers.so 189257 ns
mod_status.so 205965 ns
mod_env.so 206865 ns
mod_dav.so 240208 ns
mod_access.so 245391 ns
mod_unique_id.so 321004 ns
mod_negotiation.so 331457 ns
mod_auth_digest.so 333495 ns
mod_dtrace.so 467512 ns
mod_rewrite.so 527799 ns
mod_include.so 874804 ns
mod_alias.so 1886377 ns
mod_log_config.so 3044315 ns
mod_mime.so 3684061 ns
mod_setenvif.so 4318186 ns
httpd 22451784 ns
Total 40 ms
Hook Name Module Hook Function Time
ap_run_pre_connection mod_dtrace.so apache_pre_connection 24398 ns
ap_run_create_connection mod_dtrace.so apache_create_connection 25998 ns
ap_run_handler mod_actions.so action_handler 43093 ns
ap_run_log_transaction mod_log_forensic.so log_after 43118 ns
ap_run_access_checker httpd do_nothing 46784 ns
ap_run_header_parser mod_setenvif.so match_headers 57872 ns
ap_run_post_read_request mod_log_forensic.so log_before 59069 ns
ap_run_insert_filter httpd core_insert_filter 61771 ns
ap_run_post_read_request mod_dtrace.so apache_receive_request 66115 ns
ap_run_access_checker mod_dtrace.so apache_check_access 66201 ns
ap_run_insert_filter mod_expires.so expires_insert_filter 66941 ns
ap_run_insert_filter mod_headers.so ap_headers_insert_output_filter 78055 ns
ap_run_handler mod_negotiation.so handle_map_file 90869 ns
ap_run_fixups mod_dir.so fixup_dir 92026 ns
ap_run_handler mod_dav.so dav_handler 96851 ns
ap_run_handler mod_rewrite.so handler_redirect 98021 ns
ap_run_fixups mod_speling.so check_speling 100357 ns
ap_run_translate_name mod_userdir.so translate_userdir 102598 ns
ap_run_translate_name mod_vhost_alias.so mva_translate 104377 ns
ap_run_translate_name mod_rewrite.so hook_uri2file 106062 ns
ap_run_handler mod_info.so display_info 108378 ns
ap_run_fixups mod_negotiation.so fix_encoding 109785 ns
ap_run_handler mod_autoindex.so handle_autoindex 110851 ns
ap_run_fixups mod_headers.so ap_headers_fixup 111202 ns
ap_run_fixups mod_rewrite.so hook_fixup 111632 ns
ap_run_fixups mod_usertrack.so spot_cookie 117790 ns
ap_run_fixups mod_auth_digest.so add_auth_info 118533 ns
ap_run_fixups httpd core_override_type 124018 ns
ap_run_map_to_storage httpd ap_send_http_trace 129160 ns
ap_run_type_checker mod_negotiation.so handle_multi 130803 ns
ap_run_handler mod_asis.so asis_handler 134288 ns
ap_run_log_transaction mod_dtrace.so apache_log_request 134483 ns
ap_run_fixups mod_cern_meta.so add_cern_meta_data 138016 ns
ap_run_handler mod_cgi.so cgi_handler 138344 ns
ap_run_handler mod_imap.so imap_handler 142541 ns
ap_run_fixups mod_dav.so dav_fixups 143357 ns
ap_run_create_request mod_dtrace.so apache_create_request 150317 ns
ap_run_pre_connection httpd core_pre_connection 153533 ns
ap_run_fixups mod_alias.so fixup_redir 199353 ns
ap_run_handler mod_status.so status_handler 205965 ns
ap_run_fixups mod_env.so fixup_env_module 206865 ns
ap_run_type_checker mod_rewrite.so hook_mimetype 212084 ns
ap_run_post_read_request mod_auth_digest.so parse_hdr_and_update_nc 214962 ns
ap_run_access_checker mod_access.so check_dir_access 245391 ns
ap_run_post_read_request mod_unique_id.so gen_unique_id 321004 ns
ap_run_create_request httpd http_create_request 505504 ns
ap_run_translate_name httpd ap_core_translate 542836 ns
ap_run_create_request httpd core_create_req 728807 ns
ap_run_create_connection httpd core_create_conn 874776 ns
ap_run_fixups mod_include.so include_fixup 874804 ns
ap_run_translate_name mod_alias.so translate_alias_redir 1687024 ns
ap_run_log_transaction mod_log_config.so multi_log_transaction 3044315 ns
ap_run_type_checker mod_mime.so find_ct 3684061 ns
ap_run_post_read_request mod_setenvif.so match_headers 4260314 ns
ap_run_map_to_storage httpd core_map_to_storage 8709887 ns
ap_run_handler httpd default_handler 10574708 ns







