]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: put cluster log at /var/log/ceph/$cluster.log and/or send to syslog
authorSage Weil <sage@inktank.com>
Wed, 6 Jun 2012 21:09:22 +0000 (14:09 -0700)
committerSage Weil <sage@inktank.com>
Wed, 6 Jun 2012 21:09:22 +0000 (14:09 -0700)
Also, stop breaking it down by event severity on disk.  If you want that,
use syslog.

Fixes: #2497
Backport: dho
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/common/LogClient.cc
src/common/LogEntry.cc
src/common/LogEntry.h
src/common/config_opts.h
src/mon/LogMonitor.cc
src/vstart.sh

index 97a25f60be7969de18b3e822da5513c0f3597d6f..0dce8bd69a032d25fbf26cfb3224d703005431ef 100644 (file)
 
 #define dout_subsys ceph_subsys_monc
 
-/*
- * Given a clog log_type, return the equivalent syslog priority
- */
-static inline int clog_type_to_syslog_prio(clog_type t)
-{
-  switch (t) {
-    case CLOG_DEBUG:
-      return LOG_DEBUG;
-    case CLOG_INFO:
-      return LOG_INFO;
-    case CLOG_WARN:
-      return LOG_WARNING;
-    case CLOG_ERROR:
-      return LOG_ERR;
-    case CLOG_SEC:
-      return LOG_CRIT;
-    default:
-      assert(0);
-      return 0;
-  }
-}
-
 LogClient::LogClient(CephContext *cct, Messenger *m, MonMap *mm,
                     enum logclient_flag_t flags)
   : cct(cct), messenger(m), monmap(mm), is_mon(flags & FLAG_MON),
index 3e7a01e5bcad707881b89fa84b4979ba1b7addcf..80801bcf3a305167a3a0417d3bf9e8be95371bc1 100644 (file)
@@ -1,7 +1,32 @@
 
+#include <syslog.h>
+
 #include "LogEntry.h"
 #include "Formatter.h"
 
+
+int clog_type_to_syslog_prio(clog_type t)
+{
+  switch (t) {
+    case CLOG_DEBUG:
+      return LOG_DEBUG;
+    case CLOG_INFO:
+      return LOG_INFO;
+    case CLOG_WARN:
+      return LOG_WARNING;
+    case CLOG_ERROR:
+      return LOG_ERR;
+    case CLOG_SEC:
+      return LOG_CRIT;
+    default:
+      assert(0);
+      return 0;
+  }
+}
+
+// ----
+// LogEntryKey
+
 void LogEntryKey::encode(bufferlist& bl) const
 {
   ::encode(who, bl);
index ad9d9808e790273ef1b2dc93ddfd45a609050e7b..e8509d5a5b11f607ff046edad9ac58a28d1d3dfd 100644 (file)
@@ -32,6 +32,12 @@ typedef enum {
   CLOG_ERROR = 4,
 } clog_type;
 
+/*
+ * Given a clog log_type, return the equivalent syslog priority
+ */
+int clog_type_to_syslog_prio(clog_type t);
+
+
 struct LogEntryKey {
   entity_inst_t who;
   utime_t stamp;
index e26ec3b9d017e7ffce9ba9acce6af036db1ecffb..373684ee8a9269a54b399a4a570338c2b32e6c46 100644 (file)
@@ -42,6 +42,9 @@ OPTION(log_flush_on_exit, OPT_BOOL, true)
 OPTION(clog_to_monitors, OPT_BOOL, true)
 OPTION(clog_to_syslog, OPT_BOOL, false)
 
+OPTION(mon_cluster_log_to_syslog, OPT_BOOL, false)
+OPTION(mon_cluster_log_file, OPT_STR, "/var/log/ceph/$cluster.log")
+
 DEFAULT_SUBSYS(0, 5)
 SUBSYS(lockdep, 0, 5)
 SUBSYS(context, 0, 5)
index f3287b86dcd703947e0c3aec7ce7c700e188dbe1..d8bf82ebe34937132831606a7dee3a4cb59d4afd 100644 (file)
@@ -12,6 +12,8 @@
  * 
  */
 
+#include <sstream>
+#include <syslog.h>
 
 #include "LogMonitor.h"
 #include "Monitor.h"
@@ -24,9 +26,8 @@
 #include "common/Timer.h"
 
 #include "osd/osd_types.h"
-
+#include "common/errno.h"
 #include "common/config.h"
-#include <sstream>
 
 #define dout_subsys ceph_subsys_mon
 #undef dout_prefix
@@ -97,11 +98,6 @@ void LogMonitor::update_from_paxos()
   assert(paxosv >= summary.version);
 
   bufferlist blog;
-  bufferlist blogdebug;
-  bufferlist bloginfo;
-  bufferlist blogwarn;
-  bufferlist blogerr;
-  bufferlist blogsec;
 
   if (summary.version != paxos->get_stashed_version()) {
     bufferlist latest;
@@ -127,21 +123,14 @@ void LogMonitor::update_from_paxos()
 
       stringstream ss;
       ss << le;
-      string s;
-      getline(ss, s);
-      s += "\n";
-
-      blog.append(s);
-      if (le.type >= CLOG_DEBUG)
-       blogdebug.append(s);
-      if (le.type >= CLOG_INFO)
-       bloginfo.append(s);
-      if (le.type == CLOG_SEC)
-        blogsec.append(s);
-      if (le.type >= CLOG_WARN)
-       blogwarn.append(s);
-      if (le.type >= CLOG_ERROR)
-       blogerr.append(s);
+      string s = ss.str();
+
+      if (g_conf->mon_cluster_log_to_syslog) {
+       syslog(clog_type_to_syslog_prio(le.type) | LOG_USER, "%s", s.c_str());
+      }
+      if (g_conf->mon_cluster_log_file.length()) {
+       blog.append(s + "\n");
+      }
 
       summary.add(le);
     }
@@ -153,19 +142,16 @@ void LogMonitor::update_from_paxos()
   ::encode(summary, bl);
   paxos->stash_latest(paxosv, bl);
 
-  if (blog.length())
-    mon->store->append_bl_ss(blog, "log", NULL);
-  if (blogdebug.length())
-    mon->store->append_bl_ss(blogdebug, "log.debug", NULL);
-  if (bloginfo.length())
-    mon->store->append_bl_ss(bloginfo, "log.info", NULL);
-  if (blogsec.length())
-    mon->store->append_bl_ss(bloginfo, "log.security", NULL);
-  if (blogwarn.length())
-    mon->store->append_bl_ss(blogwarn, "log.warn", NULL);
-  if (blogerr.length())
-    mon->store->append_bl_ss(blogerr, "log.err", NULL);
-
+  if (blog.length()) {
+    int fd = ::open(g_conf->mon_cluster_log_file.c_str(), O_WRONLY|O_APPEND|O_CREAT, 0600);
+    if (fd < 0) {
+      int err = -errno;
+      dout(1) << "unable to write to " << g_conf->mon_cluster_log_file << ": " << cpp_strerror(err) << dendl;
+    } else {
+      blog.write_fd(fd);
+      TEMP_FAILURE_RETRY(::close(fd));
+    }
+  }
 
   // trim
   unsigned max = g_conf->mon_max_log_epochs;
index ccd7eb032c1d720c8550f4c07fb7f287f178b9d5..d444c48d81d8d4e52399517370af201a53b8290b 100755 (executable)
@@ -285,7 +285,7 @@ $COSDDEBUG
 [mon]
 $DAEMONOPTS
 $CMONDEBUG
-
+        mon cluster log file = out/cluster.mon.\$id.log
 EOF
                fi