From 47b202ecfdc00996b085a0c0d557564fbaa8bdfe Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 6 Jun 2012 14:09:22 -0700 Subject: [PATCH] mon: put cluster log at /var/log/ceph/$cluster.log and/or send to syslog 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 Reviewed-by: Joao Eduardo Luis Reviewed-by: Greg Farnum --- src/common/LogClient.cc | 22 ---------------- src/common/LogEntry.cc | 25 ++++++++++++++++++ src/common/LogEntry.h | 6 +++++ src/common/config_opts.h | 3 +++ src/mon/LogMonitor.cc | 56 +++++++++++++++------------------------- src/vstart.sh | 2 +- 6 files changed, 56 insertions(+), 58 deletions(-) diff --git a/src/common/LogClient.cc b/src/common/LogClient.cc index 97a25f60be796..0dce8bd69a032 100644 --- a/src/common/LogClient.cc +++ b/src/common/LogClient.cc @@ -39,28 +39,6 @@ #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), diff --git a/src/common/LogEntry.cc b/src/common/LogEntry.cc index 3e7a01e5bcad7..80801bcf3a305 100644 --- a/src/common/LogEntry.cc +++ b/src/common/LogEntry.cc @@ -1,7 +1,32 @@ +#include + #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); diff --git a/src/common/LogEntry.h b/src/common/LogEntry.h index ad9d9808e7902..e8509d5a5b11f 100644 --- a/src/common/LogEntry.h +++ b/src/common/LogEntry.h @@ -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; diff --git a/src/common/config_opts.h b/src/common/config_opts.h index e26ec3b9d017e..373684ee8a926 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -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) diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index f3287b86dcd70..d8bf82ebe3493 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -12,6 +12,8 @@ * */ +#include +#include #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 #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; diff --git a/src/vstart.sh b/src/vstart.sh index ccd7eb032c1d7..d444c48d81d8d 100755 --- a/src/vstart.sh +++ b/src/vstart.sh @@ -285,7 +285,7 @@ $COSDDEBUG [mon] $DAEMONOPTS $CMONDEBUG - + mon cluster log file = out/cluster.mon.\$id.log EOF fi -- 2.39.5