You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2013/09/04 04:27:16 UTC

[12/21] git commit: TS-2165: Introduce cluster-wide logging stats

TS-2165: Introduce cluster-wide logging stats

With this patch, we can see the logging status of whole cluster.

Signed-off-by: Yunkai Zhang <qi...@taobao.com>


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/49e8a7a0
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/49e8a7a0
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/49e8a7a0

Branch: refs/heads/5.0.x
Commit: 49e8a7a0e538a53083b564baaf06a51f96acc831
Parents: a415123
Author: Yunkai Zhang <qi...@taobao.com>
Authored: Thu Aug 29 01:27:33 2013 +0800
Committer: Yunkai Zhang <qi...@taobao.com>
Committed: Mon Sep 2 16:35:13 2013 +0800

----------------------------------------------------------------------
 CHANGES                               |   2 +
 mgmt/RecordsConfig.cc                 | 110 ++++++++++++++++++++
 proxy/config/stats.config.xml.default | 156 +++++++++++++++++++++++++++++
 proxy/logging/Log.cc                  |  16 ++-
 proxy/logging/LogConfig.cc            |  24 ++++-
 proxy/logging/LogConfig.h             |   6 ++
 proxy/logging/LogFile.cc              |  11 +-
 proxy/logging/LogHost.cc              |   8 ++
 proxy/logging/LogObject.cc            |   3 +
 9 files changed, 329 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 24b2323..5a80c2f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 4.1.0
 
+  *) [TS-2165] Introduce cluster-wide logging stats
+
   *) [TS-2167] Update apichecker.pl to give suggestions on additional
    deprecated APIs
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 93e8c7d..da8e36e 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -1671,6 +1671,61 @@ RecordElement RecordsConfig[] = {
   {RECT_NODE, "proxy.node.user_agents_total_documents_served", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
   ,
 
+  //
+  //#
+  //# Logging stats on NODE
+  //#
+  {RECT_NODE, "proxy.node.log.event_log_error_ok", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_error_skip", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_error_aggr", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_error_full", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_error_fail", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_access_ok", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_access_skip", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_access_aggr", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_access_full", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.event_log_access_fail", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.num_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.num_lost_before_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.num_received_from_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.num_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.num_lost_before_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_lost_before_preproc", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_lost_before_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_sent_to_network_avg_10s", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_received_from_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_received_from_network_avg_10s", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_lost_before_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_written_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_NODE, "proxy.node.log.bytes_lost_before_written_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+
   //#
   //# Add CLUSTER    Records Here
   //#
@@ -1781,6 +1836,61 @@ RecordElement RecordsConfig[] = {
   {RECT_CLUSTER, "proxy.cluster.current_server_connections", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
   ,
 
+  //
+  //#
+  //# Logging stats on CLUSTER
+  //#
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_error_ok", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_error_skip", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_error_aggr", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_error_full", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_error_fail", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_access_ok", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_access_skip", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_access_aggr", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_access_full", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.event_log_access_fail", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.num_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.num_lost_before_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.num_received_from_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.num_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.num_lost_before_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_lost_before_preproc", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_lost_before_sent_to_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_sent_to_network_avg_10s", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_received_from_network", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_received_from_network_avg_10s", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_lost_before_flush_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_written_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+  {RECT_CLUSTER, "proxy.cluster.log.bytes_lost_before_written_to_disk", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
+
   //#
   //# SSL parent proxying info
   //#

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/config/stats.config.xml.default
----------------------------------------------------------------------
diff --git a/proxy/config/stats.config.xml.default b/proxy/config/stats.config.xml.default
index ac6d211..6d97a7a 100644
--- a/proxy/config/stats.config.xml.default
+++ b/proxy/config/stats.config.xml.default
@@ -1790,6 +1790,162 @@
         </expression>
     </statistics>
 
+    <!-- Logging -->
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.event_log_access_ok</destination>
+	<destination scope="cluster">proxy.cluster.log.event_log_access_ok</destination>
+        <expression>
+	    proxy.process.log.event_log_access_ok
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.event_log_access_skip</destination>
+	<destination scope="cluster">proxy.cluster.log.event_log_access_skip</destination>
+        <expression>
+	    proxy.process.log.event_log_access_skip
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.event_log_access_aggr</destination>
+	<destination scope="cluster">proxy.cluster.log.event_log_access_aggr</destination>
+        <expression>
+	    proxy.process.log.event_log_access_aggr
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.event_log_access_full</destination>
+	<destination scope="cluster">proxy.cluster.log.event_log_access_full</destination>
+        <expression>
+            proxy.process.log.event_log_access_full
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.event_log_access_fail</destination>
+	<destination scope="cluster">proxy.cluster.log.event_log_access_fail</destination>
+        <expression>
+            proxy.process.log.event_log_access_fail
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.num_lost_before_sent_to_network</destination>
+	<destination scope="cluster">proxy.cluster.log.num_lost_before_sent_to_network</destination>
+        <expression>
+            proxy.process.log.num_lost_before_sent_to_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.num_sent_to_network</destination>
+	<destination scope="cluster">proxy.cluster.log.num_sent_to_network</destination>
+        <expression>
+            proxy.process.log.num_sent_to_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_lost_before_sent_to_network</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_lost_before_sent_to_network</destination>
+        <expression>
+            proxy.process.log.bytes_lost_before_sent_to_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_sent_to_network</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_sent_to_network</destination>
+        <expression>
+            proxy.process.log.bytes_sent_to_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.num_received_from_network</destination>
+	<destination scope="cluster">proxy.cluster.log.num_received_from_network</destination>
+        <expression>
+            proxy.process.log.num_received_from_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_received_from_network</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_received_from_network</destination>
+        <expression>
+            proxy.process.log.bytes_received_from_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_lost_before_preproc</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_lost_before_preproc</destination>
+        <expression>
+            proxy.process.log.bytes_lost_before_preproc
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.num_lost_before_flush_to_disk</destination>
+	<destination scope="cluster">proxy.cluster.log.num_lost_before_flush_to_disk</destination>
+        <expression>
+            proxy.process.log.num_lost_before_flush_to_disk
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_lost_before_flush_to_disk</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_lost_before_flush_to_disk</destination>
+        <expression>
+            proxy.process.log.bytes_lost_before_flush_to_disk
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0">
+        <destination>proxy.node.log.bytes_lost_before_written_to_disk</destination>
+	<destination scope="cluster">proxy.cluster.log.bytes_lost_before_written_to_disk</destination>
+        <expression>
+            proxy.process.log.bytes_lost_before_written_to_disk
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0"
+        interval="10">
+        <destination>proxy.node.log.bytes_sent_to_network_avg_10s</destination>
+        <destination scope="cluster">proxy.cluster.log.bytes_sent_to_network_avg_10s</destination>
+        <expression>
+            #proxy.process.log.bytes_sent_to_network
+        </expression>
+    </statistics>
+
+    <statistics
+	minimum="0"
+        interval="10">
+        <destination>proxy.node.log.bytes_received_from_network_avg_10s</destination>
+        <destination scope="cluster">proxy.cluster.log.bytes_received_from_network_avg_10s</destination>
+        <expression>
+            #proxy.process.log.bytes_received_from_network
+        </expression>
+    </statistics>
+
 </ink:statistics>
 
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/Log.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc
index ec3c7ca..ea6493f 100644
--- a/proxy/logging/Log.cc
+++ b/proxy/logging/Log.cc
@@ -1370,6 +1370,10 @@ Log::flush_thread_main(void * /* args ATS_UNUSED */)
       if (!logfile->is_open()) {
         Warning("File:%s was closed, have dropped (%d) bytes.",
                 logfile->m_name, total_bytes);
+
+        RecIncrRawStat(log_rsb, mutex->thread_holding,
+                       log_stat_bytes_lost_before_written_to_disk_stat,
+                       total_bytes);
         delete fdata;
         continue;
       }
@@ -1380,6 +1384,10 @@ Log::flush_thread_main(void * /* args ATS_UNUSED */)
         if (Log::config->logging_space_exhausted) {
           Warning("logging space exhausted, failed to write file:%s, have dropped (%d) bytes.",
                   logfile->m_name, (total_bytes - bytes_written));
+
+          RecIncrRawStat(log_rsb, mutex->thread_holding,
+                         log_stat_bytes_lost_before_written_to_disk_stat,
+                         total_bytes - bytes_written);
           break;
         }
 
@@ -1387,8 +1395,12 @@ Log::flush_thread_main(void * /* args ATS_UNUSED */)
                       total_bytes - bytes_written);
         if (len < 0) {
           Error("Failed to write log to %s: [tried %d, wrote %d, %s]",
-                logfile->m_name, total_bytes, bytes_written, strerror(errno));
-          ink_release_assert(!"test");
+                logfile->m_name, total_bytes - bytes_written,
+                bytes_written, strerror(errno));
+
+          RecIncrRawStat(log_rsb, mutex->thread_holding,
+                         log_stat_bytes_lost_before_written_to_disk_stat,
+                         total_bytes - bytes_written);
           break;
         }
         bytes_written += len;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/LogConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogConfig.cc b/proxy/logging/LogConfig.cc
index 7dbabed..d04fd48 100644
--- a/proxy/logging/LogConfig.cc
+++ b/proxy/logging/LogConfig.cc
@@ -1349,25 +1349,43 @@ LogConfig::register_stat_callbacks()
   //
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.num_sent_to_network",
-                     RECD_INT, RECP_PERSISTENT, (int) log_stat_num_sent_to_network_stat, RecRawStatSyncSum);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) log_stat_num_sent_to_network_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.num_lost_before_sent_to_network",
+                     RECD_COUNTER, RECP_PERSISTENT, (int) log_stat_num_lost_before_sent_to_network_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.num_received_from_network",
-                     RECD_INT, RECP_PERSISTENT, (int) log_stat_num_received_from_network_stat, RecRawStatSyncSum);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) log_stat_num_received_from_network_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.num_flush_to_disk",
-                     RECD_INT, RECP_PERSISTENT, (int) log_stat_num_flush_to_disk_stat, RecRawStatSyncSum);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) log_stat_num_flush_to_disk_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.num_lost_before_flush_to_disk",
+                     RECD_COUNTER, RECP_PERSISTENT, (int) log_stat_num_lost_before_flush_to_disk_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.bytes_lost_before_preproc",
+                     RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_lost_before_preproc_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.bytes_sent_to_network",
                      RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_sent_to_network_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.bytes_lost_before_sent_to_network",
+                     RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_lost_before_sent_to_network_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.bytes_received_from_network",
                      RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_received_from_network_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.bytes_flush_to_disk",
                      RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_flush_to_disk_stat, RecRawStatSyncSum);
   RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.bytes_lost_before_flush_to_disk",
+                     RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_lost_before_flush_to_disk_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
                      "proxy.process.log.bytes_written_to_disk",
                      RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_written_to_disk_stat, RecRawStatSyncSum);
+  RecRegisterRawStat(log_rsb, RECT_PROCESS,
+                     "proxy.process.log.bytes_lost_before_written_to_disk",
+                     RECD_INT, RECP_PERSISTENT, (int) log_stat_bytes_lost_before_written_to_disk_stat, RecRawStatSyncSum);
   //
   // I/O
   //

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/LogConfig.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogConfig.h b/proxy/logging/LogConfig.h
index d9e46c4..f715e8c 100644
--- a/proxy/logging/LogConfig.h
+++ b/proxy/logging/LogConfig.h
@@ -50,14 +50,20 @@ enum
 
   // Logging Data
   log_stat_num_sent_to_network_stat,
+  log_stat_num_lost_before_sent_to_network_stat,
   log_stat_num_received_from_network_stat,
   log_stat_num_flush_to_disk_stat,
+  log_stat_num_lost_before_flush_to_disk_stat,
 
+  log_stat_bytes_lost_before_preproc_stat,
   log_stat_bytes_sent_to_network_stat,
+  log_stat_bytes_lost_before_sent_to_network_stat,
   log_stat_bytes_received_from_network_stat,
 
   log_stat_bytes_flush_to_disk_stat,
+  log_stat_bytes_lost_before_flush_to_disk_stat,
   log_stat_bytes_written_to_disk_stat,
+  log_stat_bytes_lost_before_written_to_disk_stat,
 
   // Logging I/O
   log_stat_log_files_open_stat,

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/LogFile.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogFile.cc b/proxy/logging/LogFile.cc
index c27dc20..68aa90c 100644
--- a/proxy/logging/LogFile.cc
+++ b/proxy/logging/LogFile.cc
@@ -628,6 +628,7 @@ LogFile::write_ascii_logbuffer3(LogBufferHeader * buffer_header, char *alt_forma
   Debug("log-file", "entering LogFile::write_ascii_logbuffer3 for %s " "(this=%p)", m_name, this);
   ink_assert(buffer_header != NULL);
 
+  ProxyMutex *mutex = this_thread()->mutex;
   LogBufferIterator iter(buffer_header);
   LogEntryHeader *entry_header;
   int fmt_entry_count = 0;
@@ -684,6 +685,14 @@ LogFile::write_ascii_logbuffer3(LogBufferHeader * buffer_header, char *alt_forma
       } else {
         Error("Failed to convert LogBuffer to ascii, have dropped (%" PRIu32 ") bytes.",
               entry_header->entry_len);
+
+        RecIncrRawStat(log_rsb, mutex->thread_holding,
+                       log_stat_num_lost_before_flush_to_disk_stat,
+                       fmt_entry_count);
+
+        RecIncrRawStat(log_rsb, mutex->thread_holding,
+                       log_stat_bytes_lost_before_flush_to_disk_stat,
+                       fmt_buf_bytes);
       }
       // if writing to a pipe, fill the buffer with a single
       // record to avoid as much as possible overflowing the
@@ -700,8 +709,6 @@ LogFile::write_ascii_logbuffer3(LogBufferHeader * buffer_header, char *alt_forma
     //
     LogFlushData *flush_data = new LogFlushData(this, ascii_buffer, fmt_buf_bytes);
 
-    ProxyMutex *mutex = this_thread()->mutex;
-
     RecIncrRawStat(log_rsb, mutex->thread_holding, log_stat_num_flush_to_disk_stat,
                    fmt_entry_count);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/LogHost.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogHost.cc b/proxy/logging/LogHost.cc
index 54297f5..84e08f4 100644
--- a/proxy/logging/LogHost.cc
+++ b/proxy/logging/LogHost.cc
@@ -343,6 +343,14 @@ done:
 void
 LogHost::orphan_write_and_try_delete(LogBuffer * lb)
 {
+  RecIncrRawStat(log_rsb, this_thread()->mutex->thread_holding,
+                 log_stat_num_lost_before_sent_to_network_stat,
+                 lb->header()->entry_count);
+
+  RecIncrRawStat(log_rsb, this_thread()->mutex->thread_holding,
+                 log_stat_bytes_lost_before_sent_to_network_stat,
+                 lb->header()->byte_count);
+
   if (!Log::config->logging_space_exhausted) {
     Debug("log-host", "Sending LogBuffer to orphan file %s", m_orphan_file->get_name());
     m_orphan_file->preproc_and_try_delete(lb);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/49e8a7a0/proxy/logging/LogObject.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogObject.cc b/proxy/logging/LogObject.cc
index 7bcbf9f..089c8eb 100644
--- a/proxy/logging/LogObject.cc
+++ b/proxy/logging/LogObject.cc
@@ -51,6 +51,9 @@ LogBufferManager::preproc_buffers(LogBufferSink *sink) {
       delete b;
       ink_atomic_increment(&_num_flush_buffers, -1);
       Warning("Dropping log buffer, can't keep up.");
+      RecIncrRawStat(log_rsb, this_thread()->mutex->thread_holding,
+                     log_stat_bytes_lost_before_preproc_stat,
+                     b->header()->byte_count);
     } else {
       new_q.push(b);
     }