Add additional fields to mongodb input (#7321)

New metrics include:
- assertions
- database operations
- documents/index keys usage
- replication
- tcmalloc memory management
- storage
- version
This commit is contained in:
Kostiantyn Nemchenko 2020-05-12 21:31:54 +03:00 committed by GitHub
parent 6a9e879d71
commit 00ad5baa19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 632 additions and 118 deletions

View File

@ -60,35 +60,46 @@ by running Telegraf with the `--debug` argument.
- fields: - fields:
- active_reads (integer) - active_reads (integer)
- active_writes (integer) - active_writes (integer)
- aggregate_command_failed (integer)
- aggregate_command_total (integer)
- assert_msg (integer)
- assert_regular (integer)
- assert_rollovers (integer)
- assert_user (integer)
- assert_warning (integer)
- available_reads (integer) - available_reads (integer)
- available_writes (integer) - available_writes (integer)
- commands (integer) - commands (integer)
- connections_current (integer)
- connections_available (integer) - connections_available (integer)
- connections_current (integer)
- connections_total_created (integer) - connections_total_created (integer)
- cursor_timed_out_count (integer) - count_command_failed (integer)
- count_command_total (integer)
- cursor_no_timeout_count (integer) - cursor_no_timeout_count (integer)
- cursor_pinned_count (integer) - cursor_pinned_count (integer)
- cursor_timed_out_count (integer)
- cursor_total_count (integer) - cursor_total_count (integer)
- deletes (integer)
- delete_command_total (integer)
- delete_command_failed (integer) - delete_command_failed (integer)
- delete_command_total (integer)
- deletes (integer)
- distinct_command_failed (integer)
- distinct_command_total (integer)
- document_deleted (integer) - document_deleted (integer)
- document_inserted (integer) - document_inserted (integer)
- document_returned (integer) - document_returned (integer)
- document_updated (integer) - document_updated (integer)
- find_command_total (integer)
- find_command_failed (integer)
- find_and_modify_command_total (integer)
- find_and_modify_command_failed (integer) - find_and_modify_command_failed (integer)
- find_and_modify_command_total (integer)
- find_command_failed (integer)
- find_command_total (integer)
- flushes (integer) - flushes (integer)
- flushes_total_time_ns (integer) - flushes_total_time_ns (integer)
- getmores (integer)
- get_more_command_total (integer)
- get_more_command_failed (integer) - get_more_command_failed (integer)
- inserts (integer) - get_more_command_total (integer)
- insert_command_total (integer) - getmores (integer)
- insert_command_failed (integer) - insert_command_failed (integer)
- insert_command_total (integer)
- inserts (integer)
- jumbo_chunks (integer) - jumbo_chunks (integer)
- latency_commands_count (integer) - latency_commands_count (integer)
- latency_commands (integer) - latency_commands (integer)
@ -100,33 +111,74 @@ by running Telegraf with the `--debug` argument.
- net_in_bytes_count (integer) - net_in_bytes_count (integer)
- net_out_bytes_count (integer) - net_out_bytes_count (integer)
- open_connections (integer) - open_connections (integer)
- operation_scan_and_order (integer)
- operation_write_conflicts (integer)
- page_faults (integer)
- percent_cache_dirty (float) - percent_cache_dirty (float)
- percent_cache_used (float) - percent_cache_used (float)
- queries (integer) - queries (integer)
- queued_reads (integer) - queued_reads (integer)
- queued_writes (integer) - queued_writes (integer)
- repl_apply_batches_num (integer)
- repl_apply_batches_total_millis (integer)
- repl_apply_ops (integer)
- repl_buffer_count (integer)
- repl_buffer_size_bytes (integer)
- repl_commands (integer) - repl_commands (integer)
- repl_deletes (integer) - repl_deletes (integer)
- repl_executor_pool_in_progress_count (integer)
- repl_executor_queues_network_in_progress (integer)
- repl_executor_queues_sleepers (integer)
- repl_executor_unsignaled_events (integer)
- repl_getmores (integer) - repl_getmores (integer)
- repl_inserts (integer) - repl_inserts (integer)
- repl_lag (integer) - repl_lag (integer)
- repl_network_bytes (integer)
- repl_network_getmores_num (integer)
- repl_network_getmores_total_millis (integer)
- repl_network_ops (integer)
- repl_queries (integer) - repl_queries (integer)
- repl_updates (integer) - repl_updates (integer)
- repl_oplog_window_sec (integer) - repl_oplog_window_sec (integer)
- resident_megabytes (integer) - resident_megabytes (integer)
- state (string) - state (string)
- storage_freelist_search_bucket_exhausted (integer)
- storage_freelist_search_requests (integer)
- storage_freelist_search_scanned (integer)
- tcmalloc_central_cache_free_bytes (integer)
- tcmalloc_current_allocated_bytes (integer)
- tcmalloc_current_total_thread_cache_bytes (integer)
- tcmalloc_heap_size (integer)
- tcmalloc_max_total_thread_cache_bytes (integer)
- tcmalloc_pageheap_commit_count (integer)
- tcmalloc_pageheap_committed_bytes (integer)
- tcmalloc_pageheap_decommit_count (integer)
- tcmalloc_pageheap_free_bytes (integer)
- tcmalloc_pageheap_reserve_count (integer)
- tcmalloc_pageheap_scavenge_count (integer)
- tcmalloc_pageheap_total_commit_bytes (integer)
- tcmalloc_pageheap_total_decommit_bytes (integer)
- tcmalloc_pageheap_total_reserve_bytes (integer)
- tcmalloc_pageheap_unmapped_bytes (integer)
- tcmalloc_spinlock_total_delay_ns (integer)
- tcmalloc_thread_cache_free_bytes (integer)
- tcmalloc_total_free_bytes (integer)
- tcmalloc_transfer_cache_free_bytes (integer)
- total_available (integer) - total_available (integer)
- total_created (integer) - total_created (integer)
- total_docs_scanned (integer)
- total_in_use (integer) - total_in_use (integer)
- total_keys_scanned (integer)
- total_refreshing (integer) - total_refreshing (integer)
- total_tickets_reads (integer) - total_tickets_reads (integer)
- total_tickets_writes (integer) - total_tickets_writes (integer)
- ttl_deletes (integer) - ttl_deletes (integer)
- ttl_passes (integer) - ttl_passes (integer)
- updates (integer)
- update_command_total (integer)
- update_command_failed (integer) - update_command_failed (integer)
- update_command_total (integer)
- updates (integer)
- uptime_ns (integer) - uptime_ns (integer)
- version (string)
- vsize_megabytes (integer) - vsize_megabytes (integer)
- wtcache_app_threads_page_read_count (integer) - wtcache_app_threads_page_read_count (integer)
- wtcache_app_threads_page_read_time (integer) - wtcache_app_threads_page_read_time (integer)
@ -208,8 +260,8 @@ by running Telegraf with the `--debug` argument.
### Example Output: ### Example Output:
``` ```
mongodb,hostname=127.0.0.1:27017 active_reads=0i,active_writes=0i,available_reads=128i,available_writes=128i,commands=1335i,commands_per_sec=7i,connections_available=814i,connections_current=5i,connections_total_created=0i,cursor_no_timeout=0i,cursor_no_timeout_count=0i,cursor_pinned=0i,cursor_pinned_count=1i,cursor_timed_out=0i,cursor_timed_out_count=0i,cursor_total=0i,cursor_total_count=1i,deletes=0i,deletes_per_sec=0i,document_deleted=0i,document_inserted=0i,document_returned=13i,document_updated=0i,flushes=5i,flushes_per_sec=0i,getmores=269i,getmores_per_sec=0i,inserts=0i,inserts_per_sec=0i,jumbo_chunks=0i,latency_commands_count=0i,latency_commands=0i,latency_reads_count=0i,latency_reads=0i,latency_writes_count=0i,latency_writes=0i,member_status="PRI",net_in_bytes=986i,net_in_bytes_count=358006i,net_out_bytes=23906i,net_out_bytes_count=661507i,open_connections=5i,percent_cache_dirty=0,percent_cache_used=0,queries=18i,queries_per_sec=3i,queued_reads=0i,queued_writes=0i,repl_commands=0i,repl_commands_per_sec=0i,repl_deletes=0i,repl_deletes_per_sec=0i,repl_getmores=0i,repl_getmores_per_sec=0i,repl_inserts=0i,repl_inserts_per_sec=0i,repl_lag=0i,repl_oplog_window_sec=24355215i,repl_queries=0i,repl_queries_per_sec=0i,repl_updates=0i,repl_updates_per_sec=0i,resident_megabytes=62i,state="PRIMARY",total_available=0i,total_created=0i,total_in_use=0i,total_refreshing=0i,total_tickets_reads=128i,total_tickets_writes=128i,ttl_deletes=0i,ttl_deletes_per_sec=0i,ttl_passes=23i,ttl_passes_per_sec=0i,updates=0i,updates_per_sec=0i,vsize_megabytes=713i,wtcache_app_threads_page_read_count=13i,wtcache_app_threads_page_read_time=74i,wtcache_app_threads_page_write_count=0i,wtcache_bytes_read_into=55271i,wtcache_bytes_written_from=125402i,wtcache_current_bytes=117050i,wtcache_max_bytes_configured=1073741824i,wtcache_pages_evicted_by_app_thread=0i,wtcache_pages_queued_for_eviction=0i,wtcache_server_evicting_pages=0i,wtcache_tracked_dirty_bytes=0i,wtcache_worker_thread_evictingpages=0i 1547159491000000000 mongodb,hostname=127.0.0.1:27017 active_reads=3i,active_writes=0i,aggregate_command_failed=0i,aggregate_command_total=87210i,assert_msg=0i,assert_regular=0i,assert_rollovers=0i,assert_user=0i,assert_warning=0i,available_reads=125i,available_writes=128i,commands=218126i,commands_per_sec=1876i,connections_available=838853i,connections_current=7i,connections_total_created=8i,count_command_failed=0i,count_command_total=7i,cursor_no_timeout=0i,cursor_no_timeout_count=0i,cursor_pinned=0i,cursor_pinned_count=0i,cursor_timed_out=0i,cursor_timed_out_count=0i,cursor_total=0i,cursor_total_count=0i,delete_command_failed=0i,delete_command_total=0i,deletes=0i,deletes_per_sec=0i,distinct_command_failed=0i,distinct_command_total=87190i,document_deleted=0i,document_inserted=0i,document_returned=7i,document_updated=43595i,find_and_modify_command_failed=0i,find_and_modify_command_total=43595i,find_command_failed=0i,find_command_total=348819i,flushes=1i,flushes_per_sec=0i,flushes_total_time_ns=5000000i,get_more_command_failed=0i,get_more_command_total=0i,getmores=7i,getmores_per_sec=1i,insert_command_failed=0i,insert_command_total=0i,inserts=0i,inserts_per_sec=0i,jumbo_chunks=0i,latency_commands=44179i,latency_commands_count=122i,latency_reads=36662189i,latency_reads_count=523229i,latency_writes=6768713i,latency_writes_count=87190i,net_in_bytes=837378i,net_in_bytes_count=97692502i,net_out_bytes=690836i,net_out_bytes_count=75377383i,open_connections=7i,operation_scan_and_order=87193i,operation_write_conflicts=7i,page_faults=0i,percent_cache_dirty=0.9,percent_cache_used=1,queries=348816i,queries_per_sec=2988i,queued_reads=0i,queued_writes=0i,resident_megabytes=77i,storage_freelist_search_bucket_exhausted=0i,storage_freelist_search_requests=0i,storage_freelist_search_scanned=0i,tcmalloc_central_cache_free_bytes=280136i,tcmalloc_current_allocated_bytes=77677288i,tcmalloc_current_total_thread_cache_bytes=1222608i,tcmalloc_heap_size=142659584i,tcmalloc_max_total_thread_cache_bytes=260046848i,tcmalloc_pageheap_commit_count=1898i,tcmalloc_pageheap_committed_bytes=130084864i,tcmalloc_pageheap_decommit_count=889i,tcmalloc_pageheap_free_bytes=50610176i,tcmalloc_pageheap_reserve_count=50i,tcmalloc_pageheap_scavenge_count=884i,tcmalloc_pageheap_total_commit_bytes=13021937664i,tcmalloc_pageheap_total_decommit_bytes=12891852800i,tcmalloc_pageheap_total_reserve_bytes=142659584i,tcmalloc_pageheap_unmapped_bytes=12574720i,tcmalloc_spinlock_total_delay_ns=9767500i,tcmalloc_thread_cache_free_bytes=1222608i,tcmalloc_total_free_bytes=1797400i,tcmalloc_transfer_cache_free_bytes=294656i,total_available=0i,total_created=0i,total_docs_scanned=43595i,total_in_use=0i,total_keys_scanned=130805i,total_refreshing=0i,total_tickets_reads=128i,total_tickets_writes=128i,ttl_deletes=0i,ttl_deletes_per_sec=0i,ttl_passes=0i,ttl_passes_per_sec=0i,update_command_failed=0i,update_command_total=43595i,updates=43595i,updates_per_sec=372i,uptime_ns=60023000000i,version="3.6.17",vsize_megabytes=1048i,wtcache_app_threads_page_read_count=108i,wtcache_app_threads_page_read_time=25995i,wtcache_app_threads_page_write_count=0i,wtcache_bytes_read_into=2487250i,wtcache_bytes_written_from=74i,wtcache_current_bytes=5014530i,wtcache_internal_pages_evicted=0i,wtcache_max_bytes_configured=505413632i,wtcache_modified_pages_evicted=0i,wtcache_pages_evicted_by_app_thread=0i,wtcache_pages_queued_for_eviction=0i,wtcache_pages_read_into=139i,wtcache_pages_requested_from=699135i,wtcache_server_evicting_pages=0i,wtcache_tracked_dirty_bytes=4797426i,wtcache_unmodified_pages_evicted=0i,wtcache_worker_thread_evictingpages=0i 1586379818000000000
mongodb,hostname=127.0.0.1:27017,node_type=PRI active_reads=0i,active_writes=0i,available_reads=128i,available_writes=128i,commands=1335i,commands_per_sec=7i,connections_available=814i,connections_current=5i,connections_total_created=0i,cursor_no_timeout=0i,cursor_no_timeout_count=0i,cursor_pinned=0i,cursor_pinned_count=1i,cursor_timed_out=0i,cursor_timed_out_count=0i,cursor_total=0i,cursor_total_count=1i,deletes=0i,deletes_per_sec=0i,document_deleted=0i,document_inserted=0i,document_returned=13i,document_updated=0i,flushes=5i,flushes_per_sec=0i,getmores=269i,getmores_per_sec=0i,inserts=0i,inserts_per_sec=0i,jumbo_chunks=0i,member_status="PRI",net_in_bytes=986i,net_in_bytes_count=358006i,net_out_bytes=23906i,net_out_bytes_count=661507i,open_connections=5i,percent_cache_dirty=0,percent_cache_used=0,queries=18i,queries_per_sec=3i,queued_reads=0i,queued_writes=0i,repl_commands=0i,repl_commands_per_sec=0i,repl_deletes=0i,repl_deletes_per_sec=0i,repl_getmores=0i,repl_getmores_per_sec=0i,repl_inserts=0i,repl_inserts_per_sec=0i,repl_lag=0i,repl_oplog_window_sec=24355215i,repl_queries=0i,repl_queries_per_sec=0i,repl_updates=0i,repl_updates_per_sec=0i,resident_megabytes=62i,state="PRIMARY",total_available=0i,total_created=0i,total_in_use=0i,total_refreshing=0i,total_tickets_reads=128i,total_tickets_writes=128i,ttl_deletes=0i,ttl_deletes_per_sec=0i,ttl_passes=23i,ttl_passes_per_sec=0i,updates=0i,updates_per_sec=0i,vsize_megabytes=713i,wtcache_app_threads_page_read_count=13i,wtcache_app_threads_page_read_time=74i,wtcache_app_threads_page_write_count=0i,wtcache_bytes_read_into=55271i,wtcache_bytes_written_from=125402i,wtcache_current_bytes=117050i,wtcache_max_bytes_configured=1073741824i,wtcache_pages_evicted_by_app_thread=0i,wtcache_pages_queued_for_eviction=0i,wtcache_server_evicting_pages=0i,wtcache_tracked_dirty_bytes=0i,wtcache_worker_thread_evictingpages=0i 1547159491000000000 mongodb,hostname=127.0.0.1:27017,node_type=SEC,rs_name=rs0 active_reads=1i,active_writes=0i,aggregate_command_failed=0i,aggregate_command_total=1i,assert_msg=0i,assert_regular=0i,assert_rollovers=0i,assert_user=79i,assert_warning=0i,available_reads=127i,available_writes=128i,commands=1121855i,commands_per_sec=10i,connections_available=51183i,connections_current=17i,connections_total_created=557i,count_command_failed=0i,count_command_total=46307i,cursor_no_timeout=0i,cursor_no_timeout_count=0i,cursor_pinned=0i,cursor_pinned_count=0i,cursor_timed_out=0i,cursor_timed_out_count=28i,cursor_total=0i,cursor_total_count=0i,delete_command_failed=0i,delete_command_total=0i,deletes=0i,deletes_per_sec=0i,distinct_command_failed=0i,distinct_command_total=0i,document_deleted=0i,document_inserted=0i,document_returned=2248129i,document_updated=0i,find_and_modify_command_failed=0i,find_and_modify_command_total=0i,find_command_failed=2i,find_command_total=8764i,flushes=7850i,flushes_per_sec=0i,flushes_total_time_ns=4535446000000i,get_more_command_failed=0i,get_more_command_total=1993i,getmores=2018i,getmores_per_sec=0i,insert_command_failed=0i,insert_command_total=0i,inserts=0i,inserts_per_sec=0i,jumbo_chunks=0i,latency_commands=112011949i,latency_commands_count=1072472i,latency_reads=1877142443i,latency_reads_count=57086i,latency_writes=0i,latency_writes_count=0i,member_status="SEC",net_in_bytes=1212i,net_in_bytes_count=263928689i,net_out_bytes=41051i,net_out_bytes_count=2475389483i,open_connections=17i,operation_scan_and_order=34i,operation_write_conflicts=0i,page_faults=317i,percent_cache_dirty=1.6,percent_cache_used=73,queries=8764i,queries_per_sec=0i,queued_reads=0i,queued_writes=0i,repl_apply_batches_num=17839419i,repl_apply_batches_total_millis=399929i,repl_apply_ops=23355263i,repl_buffer_count=0i,repl_buffer_size_bytes=0i,repl_commands=11i,repl_commands_per_sec=0i,repl_deletes=440608i,repl_deletes_per_sec=0i,repl_executor_pool_in_progress_count=0i,repl_executor_queues_network_in_progress=0i,repl_executor_queues_sleepers=4i,repl_executor_unsignaled_events=0i,repl_getmores=0i,repl_getmores_per_sec=0i,repl_inserts=1875729i,repl_inserts_per_sec=0i,repl_lag=0i,repl_network_bytes=39122199371i,repl_network_getmores_num=34908797i,repl_network_getmores_total_millis=434805356i,repl_network_ops=23199086i,repl_oplog_window_sec=619292i,repl_queries=0i,repl_queries_per_sec=0i,repl_updates=21034729i,repl_updates_per_sec=38i,resident_megabytes=6721i,state="SECONDARY",storage_freelist_search_bucket_exhausted=0i,storage_freelist_search_requests=0i,storage_freelist_search_scanned=0i,tcmalloc_central_cache_free_bytes=358512400i,tcmalloc_current_allocated_bytes=5427379424i,tcmalloc_current_total_thread_cache_bytes=70349552i,tcmalloc_heap_size=10199310336i,tcmalloc_max_total_thread_cache_bytes=1073741824i,tcmalloc_pageheap_commit_count=790819i,tcmalloc_pageheap_committed_bytes=7064821760i,tcmalloc_pageheap_decommit_count=533347i,tcmalloc_pageheap_free_bytes=1207816192i,tcmalloc_pageheap_reserve_count=7706i,tcmalloc_pageheap_scavenge_count=426235i,tcmalloc_pageheap_total_commit_bytes=116127649792i,tcmalloc_pageheap_total_decommit_bytes=109062828032i,tcmalloc_pageheap_total_reserve_bytes=10199310336i,tcmalloc_pageheap_unmapped_bytes=3134488576i,tcmalloc_spinlock_total_delay_ns=2518474348i,tcmalloc_thread_cache_free_bytes=70349552i,tcmalloc_total_free_bytes=429626144i,tcmalloc_transfer_cache_free_bytes=764192i,total_available=0i,total_created=0i,total_docs_scanned=735004782i,total_in_use=0i,total_keys_scanned=6188216i,total_refreshing=0i,total_tickets_reads=128i,total_tickets_writes=128i,ttl_deletes=0i,ttl_deletes_per_sec=0i,ttl_passes=7892i,ttl_passes_per_sec=0i,update_command_failed=0i,update_command_total=0i,updates=0i,updates_per_sec=0i,uptime_ns=473590288000000i,version="3.6.17",vsize_megabytes=11136i,wtcache_app_threads_page_read_count=11467625i,wtcache_app_threads_page_read_time=1700336840i,wtcache_app_threads_page_write_count=13268184i,wtcache_bytes_read_into=348022587843i,wtcache_bytes_written_from=322571702254i,wtcache_current_bytes=5509459274i,wtcache_internal_pages_evicted=109108i,wtcache_max_bytes_configured=7547650048i,wtcache_modified_pages_evicted=911196i,wtcache_pages_evicted_by_app_thread=17366i,wtcache_pages_queued_for_eviction=16572754i,wtcache_pages_read_into=11689764i,wtcache_pages_requested_from=499825861i,wtcache_server_evicting_pages=0i,wtcache_tracked_dirty_bytes=117487510i,wtcache_unmodified_pages_evicted=11058458i,wtcache_worker_thread_evictingpages=11907226i 1586379707000000000
mongodb_db_stats,db_name=admin,hostname=127.0.0.1:27017 avg_obj_size=241,collections=2i,data_size=723i,index_size=49152i,indexes=3i,num_extents=0i,objects=3i,ok=1i,storage_size=53248i,type="db_stat" 1547159491000000000 mongodb_db_stats,db_name=admin,hostname=127.0.0.1:27017 avg_obj_size=241,collections=2i,data_size=723i,index_size=49152i,indexes=3i,num_extents=0i,objects=3i,ok=1i,storage_size=53248i,type="db_stat" 1547159491000000000
mongodb_db_stats,db_name=local,hostname=127.0.0.1:27017 avg_obj_size=813.9705882352941,collections=6i,data_size=55350i,index_size=102400i,indexes=5i,num_extents=0i,objects=68i,ok=1i,storage_size=204800i,type="db_stat" 1547159491000000000 mongodb_db_stats,db_name=local,hostname=127.0.0.1:27017 avg_obj_size=813.9705882352941,collections=6i,data_size=55350i,index_size=102400i,indexes=5i,num_extents=0i,objects=68i,ok=1i,storage_size=204800i,type="db_stat" 1547159491000000000
mongodb_col_stats,collection=foo,db_name=local,hostname=127.0.0.1:27017 size=375005928i,avg_obj_size=5494,type="col_stat",storage_size=249307136i,total_index_size=2138112i,ok=1i,count=68251i 1547159491000000000 mongodb_col_stats,collection=foo,db_name=local,hostname=127.0.0.1:27017 size=375005928i,avg_obj_size=5494,type="col_stat",storage_size=249307136i,total_index_size=2138112i,ok=1i,count=68251i 1547159491000000000

View File

@ -88,11 +88,29 @@ var DefaultStats = map[string]string{
"connections_current": "CurrentC", "connections_current": "CurrentC",
"connections_available": "AvailableC", "connections_available": "AvailableC",
"connections_total_created": "TotalCreatedC", "connections_total_created": "TotalCreatedC",
"operation_scan_and_order": "ScanAndOrderOp",
"operation_write_conflicts": "WriteConflictsOp",
"total_keys_scanned": "TotalKeysScanned",
"total_docs_scanned": "TotalObjectsScanned",
}
var DefaultAssertsStats = map[string]string{
"assert_regular": "Regular",
"assert_warning": "Warning",
"assert_msg": "Msg",
"assert_user": "User",
"assert_rollovers": "Rollovers",
} }
var DefaultCommandsStats = map[string]string{ var DefaultCommandsStats = map[string]string{
"aggregate_command_total": "AggregateCommandTotal",
"aggregate_command_failed": "AggregateCommandFailed",
"count_command_total": "CountCommandTotal",
"count_command_failed": "CountCommandFailed",
"delete_command_total": "DeleteCommandTotal", "delete_command_total": "DeleteCommandTotal",
"delete_command_failed": "DeleteCommandFailed", "delete_command_failed": "DeleteCommandFailed",
"distinct_command_total": "DistinctCommandTotal",
"distinct_command_failed": "DistinctCommandFailed",
"find_command_total": "FindCommandTotal", "find_command_total": "FindCommandTotal",
"find_command_failed": "FindCommandFailed", "find_command_failed": "FindCommandFailed",
"find_and_modify_command_total": "FindAndModifyCommandTotal", "find_and_modify_command_total": "FindAndModifyCommandTotal",
@ -115,21 +133,34 @@ var DefaultLatencyStats = map[string]string{
} }
var DefaultReplStats = map[string]string{ var DefaultReplStats = map[string]string{
"repl_inserts": "InsertRCnt", "repl_inserts": "InsertRCnt",
"repl_inserts_per_sec": "InsertR", "repl_inserts_per_sec": "InsertR",
"repl_queries": "QueryRCnt", "repl_queries": "QueryRCnt",
"repl_queries_per_sec": "QueryR", "repl_queries_per_sec": "QueryR",
"repl_updates": "UpdateRCnt", "repl_updates": "UpdateRCnt",
"repl_updates_per_sec": "UpdateR", "repl_updates_per_sec": "UpdateR",
"repl_deletes": "DeleteRCnt", "repl_deletes": "DeleteRCnt",
"repl_deletes_per_sec": "DeleteR", "repl_deletes_per_sec": "DeleteR",
"repl_getmores": "GetMoreRCnt", "repl_getmores": "GetMoreRCnt",
"repl_getmores_per_sec": "GetMoreR", "repl_getmores_per_sec": "GetMoreR",
"repl_commands": "CommandRCnt", "repl_commands": "CommandRCnt",
"repl_commands_per_sec": "CommandR", "repl_commands_per_sec": "CommandR",
"member_status": "NodeType", "member_status": "NodeType",
"state": "NodeState", "state": "NodeState",
"repl_lag": "ReplLag", "repl_lag": "ReplLag",
"repl_network_bytes": "ReplNetworkBytes",
"repl_network_getmores_num": "ReplNetworkGetmoresNum",
"repl_network_getmores_total_millis": "ReplNetworkGetmoresTotalMillis",
"repl_network_ops": "ReplNetworkOps",
"repl_buffer_count": "ReplBufferCount",
"repl_buffer_size_bytes": "ReplBufferSizeBytes",
"repl_apply_batches_num": "ReplApplyBatchesNum",
"repl_apply_batches_total_millis": "ReplApplyBatchesTotalMillis",
"repl_apply_ops": "ReplApplyOps",
"repl_executor_pool_in_progress_count": "ReplExecutorPoolInProgressCount",
"repl_executor_queues_network_in_progress": "ReplExecutorQueuesNetworkInProgress",
"repl_executor_queues_sleepers": "ReplExecutorQueuesSleepers",
"repl_executor_unsignaled_events": "ReplExecutorUnsignaledEvents",
} }
var DefaultClusterStats = map[string]string{ var DefaultClusterStats = map[string]string{
@ -182,6 +213,34 @@ var WiredTigerExtStats = map[string]string{
"wtcache_unmodified_pages_evicted": "UnmodifiedPagesEvicted", "wtcache_unmodified_pages_evicted": "UnmodifiedPagesEvicted",
} }
var DefaultTCMallocStats = map[string]string{
"tcmalloc_current_allocated_bytes": "TCMallocCurrentAllocatedBytes",
"tcmalloc_heap_size": "TCMallocHeapSize",
"tcmalloc_central_cache_free_bytes": "TCMallocCentralCacheFreeBytes",
"tcmalloc_current_total_thread_cache_bytes": "TCMallocCurrentTotalThreadCacheBytes",
"tcmalloc_max_total_thread_cache_bytes": "TCMallocMaxTotalThreadCacheBytes",
"tcmalloc_total_free_bytes": "TCMallocTotalFreeBytes",
"tcmalloc_transfer_cache_free_bytes": "TCMallocTransferCacheFreeBytes",
"tcmalloc_thread_cache_free_bytes": "TCMallocThreadCacheFreeBytes",
"tcmalloc_spinlock_total_delay_ns": "TCMallocSpinLockTotalDelayNanos",
"tcmalloc_pageheap_free_bytes": "TCMallocPageheapFreeBytes",
"tcmalloc_pageheap_unmapped_bytes": "TCMallocPageheapUnmappedBytes",
"tcmalloc_pageheap_committed_bytes": "TCMallocPageheapComittedBytes",
"tcmalloc_pageheap_scavenge_count": "TCMallocPageheapScavengeCount",
"tcmalloc_pageheap_commit_count": "TCMallocPageheapCommitCount",
"tcmalloc_pageheap_total_commit_bytes": "TCMallocPageheapTotalCommitBytes",
"tcmalloc_pageheap_decommit_count": "TCMallocPageheapDecommitCount",
"tcmalloc_pageheap_total_decommit_bytes": "TCMallocPageheapTotalDecommitBytes",
"tcmalloc_pageheap_reserve_count": "TCMallocPageheapReserveCount",
"tcmalloc_pageheap_total_reserve_bytes": "TCMallocPageheapTotalReserveBytes",
}
var DefaultStorageStats = map[string]string{
"storage_freelist_search_bucket_exhausted": "StorageFreelistSearchBucketExhausted",
"storage_freelist_search_requests": "StorageFreelistSearchRequests",
"storage_freelist_search_scanned": "StorageFreelistSearchScanned",
}
var DbDataStats = map[string]string{ var DbDataStats = map[string]string{
"collections": "Collections", "collections": "Collections",
"objects": "Objects", "objects": "Objects",
@ -272,9 +331,16 @@ func (d *MongodbData) AddDefaultStats() {
d.add("repl_oplog_window_sec", d.StatLine.OplogStats.TimeDiff) d.add("repl_oplog_window_sec", d.StatLine.OplogStats.TimeDiff)
} }
d.addStat(statLine, DefaultCommandsStats) if d.StatLine.Version != "" {
d.add("version", d.StatLine.Version)
}
d.addStat(statLine, DefaultAssertsStats)
d.addStat(statLine, DefaultClusterStats) d.addStat(statLine, DefaultClusterStats)
d.addStat(statLine, DefaultCommandsStats)
d.addStat(statLine, DefaultShardStats) d.addStat(statLine, DefaultShardStats)
d.addStat(statLine, DefaultStorageStats)
d.addStat(statLine, DefaultTCMallocStats)
if d.StatLine.StorageEngine == "mmapv1" || d.StatLine.StorageEngine == "rocksdb" { if d.StatLine.StorageEngine == "mmapv1" || d.StatLine.StorageEngine == "rocksdb" {
d.addStat(statLine, MmapStats) d.addStat(statLine, MmapStats)

View File

@ -52,6 +52,10 @@ func TestAddNonReplStats(t *testing.T) {
CurrentC: 0, CurrentC: 0,
AvailableC: 0, AvailableC: 0,
TotalCreatedC: 0, TotalCreatedC: 0,
ScanAndOrderOp: 0,
WriteConflictsOp: 0,
TotalKeysScanned: 0,
TotalObjectsScanned: 0,
}, },
tags, tags,
) )
@ -169,11 +173,39 @@ func TestAddLatencyStats(t *testing.T) {
} }
} }
func TestAddAssertsStats(t *testing.T) {
d := NewMongodbData(
&StatLine{
Regular: 3,
Warning: 9,
Msg: 2,
User: 34,
Rollovers: 0,
},
tags,
)
var acc testutil.Accumulator
d.AddDefaultStats()
d.flush(&acc)
for key := range DefaultAssertsStats {
assert.True(t, acc.HasInt64Field("mongodb", key))
}
}
func TestAddCommandsStats(t *testing.T) { func TestAddCommandsStats(t *testing.T) {
d := NewMongodbData( d := NewMongodbData(
&StatLine{ &StatLine{
AggregateCommandTotal: 12,
AggregateCommandFailed: 2,
CountCommandTotal: 18,
CountCommandFailed: 5,
DeleteCommandTotal: 73, DeleteCommandTotal: 73,
DeleteCommandFailed: 364, DeleteCommandFailed: 364,
DistinctCommandTotal: 87,
DistinctCommandFailed: 19,
FindCommandTotal: 113, FindCommandTotal: 113,
FindCommandFailed: 201, FindCommandFailed: 201,
FindAndModifyCommandTotal: 7, FindAndModifyCommandTotal: 7,
@ -198,6 +230,62 @@ func TestAddCommandsStats(t *testing.T) {
} }
} }
func TestAddTCMallocStats(t *testing.T) {
d := NewMongodbData(
&StatLine{
TCMallocCurrentAllocatedBytes: 5877253096,
TCMallocHeapSize: 8067108864,
TCMallocPageheapFreeBytes: 1054994432,
TCMallocPageheapUnmappedBytes: 677859328,
TCMallocMaxTotalThreadCacheBytes: 1073741824,
TCMallocCurrentTotalThreadCacheBytes: 80405312,
TCMallocTotalFreeBytes: 457002008,
TCMallocCentralCacheFreeBytes: 375131800,
TCMallocTransferCacheFreeBytes: 1464896,
TCMallocThreadCacheFreeBytes: 80405312,
TCMallocPageheapComittedBytes: 7389249536,
TCMallocPageheapScavengeCount: 396394,
TCMallocPageheapCommitCount: 641765,
TCMallocPageheapTotalCommitBytes: 102248751104,
TCMallocPageheapDecommitCount: 396394,
TCMallocPageheapTotalDecommitBytes: 94859501568,
TCMallocPageheapReserveCount: 6179,
TCMallocPageheapTotalReserveBytes: 8067108864,
TCMallocSpinLockTotalDelayNanos: 2344453860,
},
tags,
)
var acc testutil.Accumulator
d.AddDefaultStats()
d.flush(&acc)
for key := range DefaultTCMallocStats {
assert.True(t, acc.HasInt64Field("mongodb", key))
}
}
func TestAddStorageStats(t *testing.T) {
d := NewMongodbData(
&StatLine{
StorageFreelistSearchBucketExhausted: 0,
StorageFreelistSearchRequests: 0,
StorageFreelistSearchScanned: 0,
},
tags,
)
var acc testutil.Accumulator
d.AddDefaultStats()
d.flush(&acc)
for key := range DefaultStorageStats {
assert.True(t, acc.HasInt64Field("mongodb", key))
}
}
func TestAddShardHostStats(t *testing.T) { func TestAddShardHostStats(t *testing.T) {
expectedHosts := []string{"hostA", "hostB"} expectedHosts := []string{"hostA", "hostB"}
hostStatLines := map[string]ShardHostStatLine{} hostStatLines := map[string]ShardHostStatLine{}
@ -245,6 +333,7 @@ func TestStateTag(t *testing.T) {
NodeType: "PRI", NodeType: "PRI",
NodeState: "PRIMARY", NodeState: "PRIMARY",
ReplSetName: "rs1", ReplSetName: "rs1",
Version: "3.6.17",
}, },
tags, tags,
) )
@ -258,88 +347,139 @@ func TestStateTag(t *testing.T) {
d.AddDefaultStats() d.AddDefaultStats()
d.flush(&acc) d.flush(&acc)
fields := map[string]interface{}{ fields := map[string]interface{}{
"active_reads": int64(0), "active_reads": int64(0),
"active_writes": int64(0), "active_writes": int64(0),
"available_reads": int64(0), "aggregate_command_failed": int64(0),
"available_writes": int64(0), "aggregate_command_total": int64(0),
"total_tickets_reads": int64(0), "assert_msg": int64(0),
"total_tickets_writes": int64(0), "assert_regular": int64(0),
"commands": int64(0), "assert_rollovers": int64(0),
"commands_per_sec": int64(0), "assert_user": int64(0),
"deletes": int64(0), "assert_warning": int64(0),
"deletes_per_sec": int64(0), "available_reads": int64(0),
"flushes": int64(0), "available_writes": int64(0),
"flushes_per_sec": int64(0), "commands": int64(0),
"flushes_total_time_ns": int64(0), "commands_per_sec": int64(0),
"getmores": int64(0), "connections_available": int64(0),
"getmores_per_sec": int64(0), "connections_current": int64(0),
"inserts": int64(0), "connections_total_created": int64(0),
"inserts_per_sec": int64(0), "count_command_failed": int64(0),
"member_status": "PRI", "count_command_total": int64(0),
"state": "PRIMARY", "cursor_no_timeout": int64(0),
"net_in_bytes_count": int64(0), "cursor_no_timeout_count": int64(0),
"net_in_bytes": int64(0), "cursor_pinned": int64(0),
"net_out_bytes_count": int64(0), "cursor_pinned_count": int64(0),
"net_out_bytes": int64(0), "cursor_timed_out": int64(0),
"open_connections": int64(0), "cursor_timed_out_count": int64(0),
"queries": int64(0), "cursor_total": int64(0),
"queries_per_sec": int64(0), "cursor_total_count": int64(0),
"queued_reads": int64(0), "delete_command_failed": int64(0),
"queued_writes": int64(0), "delete_command_total": int64(0),
"repl_commands": int64(0), "deletes": int64(0),
"repl_commands_per_sec": int64(0), "deletes_per_sec": int64(0),
"repl_deletes": int64(0), "distinct_command_failed": int64(0),
"repl_deletes_per_sec": int64(0), "distinct_command_total": int64(0),
"repl_getmores": int64(0), "document_deleted": int64(0),
"repl_getmores_per_sec": int64(0), "document_inserted": int64(0),
"repl_inserts": int64(0), "document_returned": int64(0),
"repl_inserts_per_sec": int64(0), "document_updated": int64(0),
"repl_queries": int64(0), "find_and_modify_command_failed": int64(0),
"repl_queries_per_sec": int64(0), "find_and_modify_command_total": int64(0),
"repl_updates": int64(0), "find_command_failed": int64(0),
"repl_updates_per_sec": int64(0), "find_command_total": int64(0),
"repl_lag": int64(0), "flushes": int64(0),
"resident_megabytes": int64(0), "flushes_per_sec": int64(0),
"updates": int64(0), "flushes_total_time_ns": int64(0),
"updates_per_sec": int64(0), "get_more_command_failed": int64(0),
"uptime_ns": int64(0), "get_more_command_total": int64(0),
"vsize_megabytes": int64(0), "getmores": int64(0),
"ttl_deletes": int64(0), "getmores_per_sec": int64(0),
"ttl_deletes_per_sec": int64(0), "insert_command_failed": int64(0),
"ttl_passes": int64(0), "insert_command_total": int64(0),
"ttl_passes_per_sec": int64(0), "inserts": int64(0),
"jumbo_chunks": int64(0), "inserts_per_sec": int64(0),
"total_in_use": int64(0), "jumbo_chunks": int64(0),
"total_available": int64(0), "member_status": "PRI",
"total_created": int64(0), "net_in_bytes": int64(0),
"total_refreshing": int64(0), "net_in_bytes_count": int64(0),
"cursor_timed_out": int64(0), "net_out_bytes": int64(0),
"cursor_timed_out_count": int64(0), "net_out_bytes_count": int64(0),
"cursor_no_timeout": int64(0), "open_connections": int64(0),
"cursor_no_timeout_count": int64(0), "operation_scan_and_order": int64(0),
"cursor_pinned": int64(0), "operation_write_conflicts": int64(0),
"cursor_pinned_count": int64(0), "queries": int64(0),
"cursor_total": int64(0), "queries_per_sec": int64(0),
"cursor_total_count": int64(0), "queued_reads": int64(0),
"document_deleted": int64(0), "queued_writes": int64(0),
"document_inserted": int64(0), "repl_apply_batches_num": int64(0),
"document_returned": int64(0), "repl_apply_batches_total_millis": int64(0),
"document_updated": int64(0), "repl_apply_ops": int64(0),
"connections_current": int64(0), "repl_buffer_count": int64(0),
"connections_available": int64(0), "repl_buffer_size_bytes": int64(0),
"connections_total_created": int64(0), "repl_commands": int64(0),
"delete_command_total": int64(0), "repl_commands_per_sec": int64(0),
"delete_command_failed": int64(0), "repl_deletes": int64(0),
"find_command_total": int64(0), "repl_deletes_per_sec": int64(0),
"find_command_failed": int64(0), "repl_executor_pool_in_progress_count": int64(0),
"find_and_modify_command_total": int64(0), "repl_executor_queues_network_in_progress": int64(0),
"find_and_modify_command_failed": int64(0), "repl_executor_queues_sleepers": int64(0),
"get_more_command_total": int64(0), "repl_executor_unsignaled_events": int64(0),
"get_more_command_failed": int64(0), "repl_getmores": int64(0),
"insert_command_total": int64(0), "repl_getmores_per_sec": int64(0),
"insert_command_failed": int64(0), "repl_inserts": int64(0),
"update_command_total": int64(0), "repl_inserts_per_sec": int64(0),
"update_command_failed": int64(0), "repl_lag": int64(0),
"repl_network_bytes": int64(0),
"repl_network_getmores_num": int64(0),
"repl_network_getmores_total_millis": int64(0),
"repl_network_ops": int64(0),
"repl_queries": int64(0),
"repl_queries_per_sec": int64(0),
"repl_updates": int64(0),
"repl_updates_per_sec": int64(0),
"resident_megabytes": int64(0),
"state": "PRIMARY",
"storage_freelist_search_bucket_exhausted": int64(0),
"storage_freelist_search_requests": int64(0),
"storage_freelist_search_scanned": int64(0),
"tcmalloc_central_cache_free_bytes": int64(0),
"tcmalloc_current_allocated_bytes": int64(0),
"tcmalloc_current_total_thread_cache_bytes": int64(0),
"tcmalloc_heap_size": int64(0),
"tcmalloc_max_total_thread_cache_bytes": int64(0),
"tcmalloc_pageheap_commit_count": int64(0),
"tcmalloc_pageheap_committed_bytes": int64(0),
"tcmalloc_pageheap_decommit_count": int64(0),
"tcmalloc_pageheap_free_bytes": int64(0),
"tcmalloc_pageheap_reserve_count": int64(0),
"tcmalloc_pageheap_scavenge_count": int64(0),
"tcmalloc_pageheap_total_commit_bytes": int64(0),
"tcmalloc_pageheap_total_decommit_bytes": int64(0),
"tcmalloc_pageheap_total_reserve_bytes": int64(0),
"tcmalloc_pageheap_unmapped_bytes": int64(0),
"tcmalloc_spinlock_total_delay_ns": int64(0),
"tcmalloc_thread_cache_free_bytes": int64(0),
"tcmalloc_total_free_bytes": int64(0),
"tcmalloc_transfer_cache_free_bytes": int64(0),
"total_available": int64(0),
"total_created": int64(0),
"total_docs_scanned": int64(0),
"total_in_use": int64(0),
"total_keys_scanned": int64(0),
"total_refreshing": int64(0),
"total_tickets_reads": int64(0),
"total_tickets_writes": int64(0),
"ttl_deletes": int64(0),
"ttl_deletes_per_sec": int64(0),
"ttl_passes": int64(0),
"ttl_passes_per_sec": int64(0),
"update_command_failed": int64(0),
"update_command_total": int64(0),
"updates": int64(0),
"updates_per_sec": int64(0),
"uptime_ns": int64(0),
"version": "3.6.17",
"vsize_megabytes": int64(0),
} }
acc.AssertContainsTaggedFields(t, "mongodb", fields, stateTags) acc.AssertContainsTaggedFields(t, "mongodb", fields, stateTags)
} }

View File

@ -48,7 +48,7 @@ type ServerStatus struct {
UptimeMillis int64 `bson:"uptimeMillis"` UptimeMillis int64 `bson:"uptimeMillis"`
UptimeEstimate int64 `bson:"uptimeEstimate"` UptimeEstimate int64 `bson:"uptimeEstimate"`
LocalTime time.Time `bson:"localTime"` LocalTime time.Time `bson:"localTime"`
Asserts map[string]int64 `bson:"asserts"` Asserts *AssertsStats `bson:"asserts"`
BackgroundFlushing *FlushStats `bson:"backgroundFlushing"` BackgroundFlushing *FlushStats `bson:"backgroundFlushing"`
ExtraInfo *ExtraInfo `bson:"extra_info"` ExtraInfo *ExtraInfo `bson:"extra_info"`
Connections *ConnectionStats `bson:"connections"` Connections *ConnectionStats `bson:"connections"`
@ -66,6 +66,7 @@ type ServerStatus struct {
StorageEngine map[string]string `bson:"storageEngine"` StorageEngine map[string]string `bson:"storageEngine"`
WiredTiger *WiredTiger `bson:"wiredTiger"` WiredTiger *WiredTiger `bson:"wiredTiger"`
Metrics *MetricsStats `bson:"metrics"` Metrics *MetricsStats `bson:"metrics"`
TCMallocStats *TCMallocStats `bson:"tcmalloc"`
} }
// DbStats stores stats from all dbs // DbStats stores stats from all dbs
@ -179,6 +180,15 @@ type ConcurrentTransStats struct {
TotalTickets int64 `bson:"totalTickets"` TotalTickets int64 `bson:"totalTickets"`
} }
// AssertsStats stores information related to assertions raised since the MongoDB process started
type AssertsStats struct {
Regular int64 `bson:"regular"`
Warning int64 `bson:"warning"`
Msg int64 `bson:"msg"`
User int64 `bson:"user"`
Rollovers int64 `bson:"rollovers"`
}
// CacheStats stores cache statistics for WiredTiger. // CacheStats stores cache statistics for WiredTiger.
type CacheStats struct { type CacheStats struct {
TrackedDirtyBytes int64 `bson:"tracked dirty bytes in the cache"` TrackedDirtyBytes int64 `bson:"tracked dirty bytes in the cache"`
@ -332,10 +342,14 @@ type LatencyStats struct {
// MetricsStats stores information related to metrics // MetricsStats stores information related to metrics
type MetricsStats struct { type MetricsStats struct {
TTL *TTLStats `bson:"ttl"` TTL *TTLStats `bson:"ttl"`
Cursor *CursorStats `bson:"cursor"` Cursor *CursorStats `bson:"cursor"`
Document *DocumentStats `bson:"document"` Document *DocumentStats `bson:"document"`
Commands *CommandsStats `bson:"commands"` Commands *CommandsStats `bson:"commands"`
Operation *OperationStats `bson:"operation"`
QueryExecutor *QueryExecutorStats `bson:"queryExecutor"`
Repl *ReplStats `bson:"repl"`
Storage *StorageStats `bson:"storage"`
} }
// TTLStats stores information related to documents with a ttl index. // TTLStats stores information related to documents with a ttl index.
@ -360,7 +374,10 @@ type DocumentStats struct {
// CommandsStats stores information related to document metrics. // CommandsStats stores information related to document metrics.
type CommandsStats struct { type CommandsStats struct {
Aggregate *CommandsStatsValue `bson:"aggregate"`
Count *CommandsStatsValue `bson:"count"`
Delete *CommandsStatsValue `bson:"delete"` Delete *CommandsStatsValue `bson:"delete"`
Distinct *CommandsStatsValue `bson:"distinct"`
Find *CommandsStatsValue `bson:"find"` Find *CommandsStatsValue `bson:"find"`
FindAndModify *CommandsStatsValue `bson:"findAndModify"` FindAndModify *CommandsStatsValue `bson:"findAndModify"`
GetMore *CommandsStatsValue `bson:"getMore"` GetMore *CommandsStatsValue `bson:"getMore"`
@ -380,6 +397,59 @@ type OpenCursorStats struct {
Total int64 `bson:"total"` Total int64 `bson:"total"`
} }
// OperationStats stores information related to query operations
// using special operation types
type OperationStats struct {
ScanAndOrder int64 `bson:"scanAndOrder"`
WriteConflicts int64 `bson:"writeConflicts"`
}
// QueryExecutorStats stores information related to query execution
type QueryExecutorStats struct {
Scanned int64 `bson:"scanned"`
ScannedObjects int64 `bson:"scannedObjects"`
}
// ReplStats stores information related to replication process
type ReplStats struct {
Apply *ReplApplyStats `bson:"apply"`
Buffer *ReplBufferStats `bson:"buffer"`
Executor *ReplExecutorStats `bson:"executor,omitempty"`
Network *ReplNetworkStats `bson:"network"`
}
// ReplApplyStats stores information related to oplog application process
type ReplApplyStats struct {
Batches *BasicStats `bson:"batches"`
Ops int64 `bson:"ops"`
}
// ReplBufferStats stores information related to oplog buffer
type ReplBufferStats struct {
Count int64 `bson:"count"`
SizeBytes int64 `bson:"sizeBytes"`
}
// ReplExecutorStats stores information related to replication executor
type ReplExecutorStats struct {
Pool map[string]int64 `bson:"pool"`
Queues map[string]int64 `bson:"queues"`
UnsignaledEvents int64 `bson:"unsignaledEvents"`
}
// ReplNetworkStats stores information related to network usage by replication process
type ReplNetworkStats struct {
Bytes int64 `bson:"bytes"`
GetMores *BasicStats `bson:"getmores"`
Ops int64 `bson:"ops"`
}
// BasicStats stores information about an operation
type BasicStats struct {
Num int64 `bson:"num"`
TotalMillis int64 `bson:"totalMillis"`
}
// ReadWriteLockTimes stores time spent holding read/write locks. // ReadWriteLockTimes stores time spent holding read/write locks.
type ReadWriteLockTimes struct { type ReadWriteLockTimes struct {
Read int64 `bson:"R"` Read int64 `bson:"R"`
@ -406,6 +476,46 @@ type ExtraInfo struct {
PageFaults *int64 `bson:"page_faults"` PageFaults *int64 `bson:"page_faults"`
} }
// TCMallocStats stores information related to TCMalloc memory allocator metrics
type TCMallocStats struct {
Generic *GenericTCMAllocStats `bson:"generic"`
TCMalloc *DetailedTCMallocStats `bson:"tcmalloc"`
}
// GenericTCMAllocStats stores generic TCMalloc memory allocator metrics
type GenericTCMAllocStats struct {
CurrentAllocatedBytes int64 `bson:"current_allocated_bytes"`
HeapSize int64 `bson:"heap_size"`
}
// DetailedTCMallocStats stores detailed TCMalloc memory allocator metrics
type DetailedTCMallocStats struct {
PageheapFreeBytes int64 `bson:"pageheap_free_bytes"`
PageheapUnmappedBytes int64 `bson:"pageheap_unmapped_bytes"`
MaxTotalThreadCacheBytes int64 `bson:"max_total_thread_cache_bytes"`
CurrentTotalThreadCacheBytes int64 `bson:"current_total_thread_cache_bytes"`
TotalFreeBytes int64 `bson:"total_free_bytes"`
CentralCacheFreeBytes int64 `bson:"central_cache_free_bytes"`
TransferCacheFreeBytes int64 `bson:"transfer_cache_free_bytes"`
ThreadCacheFreeBytes int64 `bson:"thread_cache_free_bytes"`
PageheapComittedBytes int64 `bson:"pageheap_committed_bytes"`
PageheapScavengeCount int64 `bson:"pageheap_scavenge_count"`
PageheapCommitCount int64 `bson:"pageheap_commit_count"`
PageheapTotalCommitBytes int64 `bson:"pageheap_total_commit_bytes"`
PageheapDecommitCount int64 `bson:"pageheap_decommit_count"`
PageheapTotalDecommitBytes int64 `bson:"pageheap_total_decommit_bytes"`
PageheapReserveCount int64 `bson:"pageheap_reserve_count"`
PageheapTotalReserveBytes int64 `bson:"pageheap_total_reserve_bytes"`
SpinLockTotalDelayNanos int64 `bson:"spinlock_total_delay_ns"`
}
// StorageStats stores information related to record allocations
type StorageStats struct {
FreelistSearchBucketExhausted int64 `bson:"freelist.search.bucketExhausted"`
FreelistSearchRequests int64 `bson:"freelist.search.requests"`
FreelistSearchScanned int64 `bson:"freelist.search.scanned"`
}
// StatHeader describes a single column for mongostat's terminal output, // StatHeader describes a single column for mongostat's terminal output,
// its formatting, and in which modes it should be displayed. // its formatting, and in which modes it should be displayed.
type StatHeader struct { type StatHeader struct {
@ -508,6 +618,7 @@ type StatLine struct {
Error error Error error
IsMongos bool IsMongos bool
Host string Host string
Version string
UptimeNanos int64 UptimeNanos int64
@ -525,6 +636,13 @@ type StatLine struct {
GetMore, GetMoreCnt int64 GetMore, GetMoreCnt int64
Command, CommandCnt int64 Command, CommandCnt int64
// Asserts fields
Regular int64
Warning int64
Msg int64
User int64
Rollovers int64
// OpLatency fields // OpLatency fields
WriteOpsCnt int64 WriteOpsCnt int64
WriteLatency int64 WriteLatency int64
@ -547,13 +665,22 @@ type StatLine struct {
DeletedD, InsertedD, ReturnedD, UpdatedD int64 DeletedD, InsertedD, ReturnedD, UpdatedD int64
//Commands fields //Commands fields
AggregateCommandTotal, AggregateCommandFailed int64
CountCommandTotal, CountCommandFailed int64
DeleteCommandTotal, DeleteCommandFailed int64 DeleteCommandTotal, DeleteCommandFailed int64
DistinctCommandTotal, DistinctCommandFailed int64
FindCommandTotal, FindCommandFailed int64 FindCommandTotal, FindCommandFailed int64
FindAndModifyCommandTotal, FindAndModifyCommandFailed int64 FindAndModifyCommandTotal, FindAndModifyCommandFailed int64
GetMoreCommandTotal, GetMoreCommandFailed int64 GetMoreCommandTotal, GetMoreCommandFailed int64
InsertCommandTotal, InsertCommandFailed int64 InsertCommandTotal, InsertCommandFailed int64
UpdateCommandTotal, UpdateCommandFailed int64 UpdateCommandTotal, UpdateCommandFailed int64
// Operation fields
ScanAndOrderOp, WriteConflictsOp int64
// Query Executor fields
TotalKeysScanned, TotalObjectsScanned int64
// Connection fields // Connection fields
CurrentC, AvailableC, TotalCreatedC int64 CurrentC, AvailableC, TotalCreatedC int64
@ -608,6 +735,21 @@ type StatLine struct {
NodeType string NodeType string
NodeState string NodeState string
// Replicated Metrics fields
ReplNetworkBytes int64
ReplNetworkGetmoresNum int64
ReplNetworkGetmoresTotalMillis int64
ReplNetworkOps int64
ReplBufferCount int64
ReplBufferSizeBytes int64
ReplApplyBatchesNum int64
ReplApplyBatchesTotalMillis int64
ReplApplyOps int64
ReplExecutorPoolInProgressCount int64
ReplExecutorQueuesNetworkInProgress int64
ReplExecutorQueuesSleepers int64
ReplExecutorUnsignaledEvents int64
// Cluster fields // Cluster fields
JumboChunksCount int64 JumboChunksCount int64
@ -622,6 +764,32 @@ type StatLine struct {
// Shard Hosts stats field // Shard Hosts stats field
ShardHostStatsLines map[string]ShardHostStatLine ShardHostStatsLines map[string]ShardHostStatLine
// TCMalloc stats field
TCMallocCurrentAllocatedBytes int64
TCMallocHeapSize int64
TCMallocCentralCacheFreeBytes int64
TCMallocCurrentTotalThreadCacheBytes int64
TCMallocMaxTotalThreadCacheBytes int64
TCMallocTotalFreeBytes int64
TCMallocTransferCacheFreeBytes int64
TCMallocThreadCacheFreeBytes int64
TCMallocSpinLockTotalDelayNanos int64
TCMallocPageheapFreeBytes int64
TCMallocPageheapUnmappedBytes int64
TCMallocPageheapComittedBytes int64
TCMallocPageheapScavengeCount int64
TCMallocPageheapCommitCount int64
TCMallocPageheapTotalCommitBytes int64
TCMallocPageheapDecommitCount int64
TCMallocPageheapTotalDecommitBytes int64
TCMallocPageheapReserveCount int64
TCMallocPageheapTotalReserveBytes int64
// Storage stats field
StorageFreelistSearchBucketExhausted int64
StorageFreelistSearchRequests int64
StorageFreelistSearchScanned int64
} }
type DbStatLine struct { type DbStatLine struct {
@ -704,6 +872,7 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
returnVal := &StatLine{ returnVal := &StatLine{
Key: key, Key: key,
Host: newStat.Host, Host: newStat.Host,
Version: newStat.Version,
Mapped: -1, Mapped: -1,
Virtual: -1, Virtual: -1,
Resident: -1, Resident: -1,
@ -749,6 +918,41 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
} }
} }
if newStat.Asserts != nil {
returnVal.Regular = newStat.Asserts.Regular
returnVal.Warning = newStat.Asserts.Warning
returnVal.Msg = newStat.Asserts.Msg
returnVal.User = newStat.Asserts.User
returnVal.Rollovers = newStat.Asserts.Rollovers
}
if newStat.TCMallocStats != nil {
if newStat.TCMallocStats.Generic != nil {
returnVal.TCMallocCurrentAllocatedBytes = newStat.TCMallocStats.Generic.CurrentAllocatedBytes
returnVal.TCMallocHeapSize = newStat.TCMallocStats.Generic.HeapSize
}
if newStat.TCMallocStats.TCMalloc != nil {
returnVal.TCMallocCentralCacheFreeBytes = newStat.TCMallocStats.TCMalloc.CentralCacheFreeBytes
returnVal.TCMallocCurrentTotalThreadCacheBytes = newStat.TCMallocStats.TCMalloc.CurrentTotalThreadCacheBytes
returnVal.TCMallocMaxTotalThreadCacheBytes = newStat.TCMallocStats.TCMalloc.MaxTotalThreadCacheBytes
returnVal.TCMallocTransferCacheFreeBytes = newStat.TCMallocStats.TCMalloc.TransferCacheFreeBytes
returnVal.TCMallocThreadCacheFreeBytes = newStat.TCMallocStats.TCMalloc.ThreadCacheFreeBytes
returnVal.TCMallocTotalFreeBytes = newStat.TCMallocStats.TCMalloc.TotalFreeBytes
returnVal.TCMallocSpinLockTotalDelayNanos = newStat.TCMallocStats.TCMalloc.SpinLockTotalDelayNanos
returnVal.TCMallocPageheapFreeBytes = newStat.TCMallocStats.TCMalloc.PageheapFreeBytes
returnVal.TCMallocPageheapUnmappedBytes = newStat.TCMallocStats.TCMalloc.PageheapUnmappedBytes
returnVal.TCMallocPageheapComittedBytes = newStat.TCMallocStats.TCMalloc.PageheapComittedBytes
returnVal.TCMallocPageheapScavengeCount = newStat.TCMallocStats.TCMalloc.PageheapScavengeCount
returnVal.TCMallocPageheapCommitCount = newStat.TCMallocStats.TCMalloc.PageheapCommitCount
returnVal.TCMallocPageheapTotalCommitBytes = newStat.TCMallocStats.TCMalloc.PageheapTotalCommitBytes
returnVal.TCMallocPageheapDecommitCount = newStat.TCMallocStats.TCMalloc.PageheapDecommitCount
returnVal.TCMallocPageheapTotalDecommitBytes = newStat.TCMallocStats.TCMalloc.PageheapTotalDecommitBytes
returnVal.TCMallocPageheapReserveCount = newStat.TCMallocStats.TCMalloc.PageheapReserveCount
returnVal.TCMallocPageheapTotalReserveBytes = newStat.TCMallocStats.TCMalloc.PageheapTotalReserveBytes
}
}
if newStat.Metrics != nil && oldStat.Metrics != nil { if newStat.Metrics != nil && oldStat.Metrics != nil {
if newStat.Metrics.TTL != nil && oldStat.Metrics.TTL != nil { if newStat.Metrics.TTL != nil && oldStat.Metrics.TTL != nil {
returnVal.Passes, returnVal.PassesCnt = diff(newStat.Metrics.TTL.Passes, oldStat.Metrics.TTL.Passes, sampleSecs) returnVal.Passes, returnVal.PassesCnt = diff(newStat.Metrics.TTL.Passes, oldStat.Metrics.TTL.Passes, sampleSecs)
@ -770,10 +974,22 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
} }
if newStat.Metrics.Commands != nil { if newStat.Metrics.Commands != nil {
if newStat.Metrics.Commands.Aggregate != nil {
returnVal.AggregateCommandTotal = newStat.Metrics.Commands.Aggregate.Total
returnVal.AggregateCommandFailed = newStat.Metrics.Commands.Aggregate.Failed
}
if newStat.Metrics.Commands.Count != nil {
returnVal.CountCommandTotal = newStat.Metrics.Commands.Count.Total
returnVal.CountCommandFailed = newStat.Metrics.Commands.Count.Failed
}
if newStat.Metrics.Commands.Delete != nil { if newStat.Metrics.Commands.Delete != nil {
returnVal.DeleteCommandTotal = newStat.Metrics.Commands.Delete.Total returnVal.DeleteCommandTotal = newStat.Metrics.Commands.Delete.Total
returnVal.DeleteCommandFailed = newStat.Metrics.Commands.Delete.Failed returnVal.DeleteCommandFailed = newStat.Metrics.Commands.Delete.Failed
} }
if newStat.Metrics.Commands.Distinct != nil {
returnVal.DistinctCommandTotal = newStat.Metrics.Commands.Distinct.Total
returnVal.DistinctCommandFailed = newStat.Metrics.Commands.Distinct.Failed
}
if newStat.Metrics.Commands.Find != nil { if newStat.Metrics.Commands.Find != nil {
returnVal.FindCommandTotal = newStat.Metrics.Commands.Find.Total returnVal.FindCommandTotal = newStat.Metrics.Commands.Find.Total
returnVal.FindCommandFailed = newStat.Metrics.Commands.Find.Failed returnVal.FindCommandFailed = newStat.Metrics.Commands.Find.Failed
@ -795,6 +1011,46 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
returnVal.UpdateCommandFailed = newStat.Metrics.Commands.Update.Failed returnVal.UpdateCommandFailed = newStat.Metrics.Commands.Update.Failed
} }
} }
if newStat.Metrics.Operation != nil {
returnVal.ScanAndOrderOp = newStat.Metrics.Operation.ScanAndOrder
returnVal.WriteConflictsOp = newStat.Metrics.Operation.WriteConflicts
}
if newStat.Metrics.QueryExecutor != nil {
returnVal.TotalKeysScanned = newStat.Metrics.QueryExecutor.Scanned
returnVal.TotalObjectsScanned = newStat.Metrics.QueryExecutor.ScannedObjects
}
if newStat.Metrics.Repl != nil {
if newStat.Metrics.Repl.Apply != nil {
returnVal.ReplApplyBatchesNum = newStat.Metrics.Repl.Apply.Batches.Num
returnVal.ReplApplyBatchesTotalMillis = newStat.Metrics.Repl.Apply.Batches.TotalMillis
returnVal.ReplApplyOps = newStat.Metrics.Repl.Apply.Ops
}
if newStat.Metrics.Repl.Buffer != nil {
returnVal.ReplBufferCount = newStat.Metrics.Repl.Buffer.Count
returnVal.ReplBufferSizeBytes = newStat.Metrics.Repl.Buffer.SizeBytes
}
if newStat.Metrics.Repl.Executor != nil {
returnVal.ReplExecutorPoolInProgressCount = newStat.Metrics.Repl.Executor.Pool["inProgressCount"]
returnVal.ReplExecutorQueuesNetworkInProgress = newStat.Metrics.Repl.Executor.Queues["networkInProgress"]
returnVal.ReplExecutorQueuesSleepers = newStat.Metrics.Repl.Executor.Queues["sleepers"]
returnVal.ReplExecutorUnsignaledEvents = newStat.Metrics.Repl.Executor.UnsignaledEvents
}
if newStat.Metrics.Repl.Network != nil {
returnVal.ReplNetworkBytes = newStat.Metrics.Repl.Network.Bytes
returnVal.ReplNetworkGetmoresNum = newStat.Metrics.Repl.Network.GetMores.Num
returnVal.ReplNetworkGetmoresTotalMillis = newStat.Metrics.Repl.Network.GetMores.TotalMillis
returnVal.ReplNetworkOps = newStat.Metrics.Repl.Network.Ops
}
}
if newStat.Metrics.Storage != nil {
returnVal.StorageFreelistSearchBucketExhausted = newStat.Metrics.Storage.FreelistSearchBucketExhausted
returnVal.StorageFreelistSearchRequests = newStat.Metrics.Storage.FreelistSearchRequests
returnVal.StorageFreelistSearchScanned = newStat.Metrics.Storage.FreelistSearchScanned
}
} }
if newStat.OpcountersRepl != nil && oldStat.OpcountersRepl != nil { if newStat.OpcountersRepl != nil && oldStat.OpcountersRepl != nil {