Repository: ambari Updated Branches: refs/heads/trunk e0a810734 -> 4872d4e80
AMBARI-10249 - Add a Log Appender for Alert State Change Events (jonathanhurley) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4872d4e8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4872d4e8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4872d4e8 Branch: refs/heads/trunk Commit: 4872d4e80aff3e80bc61f82d25c3af1672a6bd32 Parents: e0a8107 Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Fri Mar 27 13:29:41 2015 -0400 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Fri Mar 27 16:37:38 2015 -0400 ---------------------------------------------------------------------- ambari-server/conf/log4j.properties | 21 ----------- ambari-server/conf/unix/log4j.properties | 17 +++++++-- ambari-server/conf/windows/log4j.properties | 9 +++++ ambari-server/src/main/conf/log4j.properties | 12 ++++++- .../alerts/AlertStateChangedListener.java | 37 ++++++++++++++++---- 5 files changed, 65 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/4872d4e8/ambari-server/conf/log4j.properties ---------------------------------------------------------------------- diff --git a/ambari-server/conf/log4j.properties b/ambari-server/conf/log4j.properties deleted file mode 100644 index a1818ce..0000000 --- a/ambari-server/conf/log4j.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# log4j configuration used during build and unit tests - -log4j.rootLogger=INFO,stdout -log4j.threshhold=ALL -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2} (%F:%M(%L)) - %m%n - -log4j.logger.org.apache.ambari=DEBUG http://git-wip-us.apache.org/repos/asf/ambari/blob/4872d4e8/ambari-server/conf/unix/log4j.properties ---------------------------------------------------------------------- diff --git a/ambari-server/conf/unix/log4j.properties b/ambari-server/conf/unix/log4j.properties index 294dd67..f619c6c 100644 --- a/ambari-server/conf/unix/log4j.properties +++ b/ambari-server/conf/unix/log4j.properties @@ -18,11 +18,16 @@ # Define some default values that can be overridden by system properties # Root logger option +ambari.log.dir=/var/log/ambari-server +ambari.log.file=ambari-server.log +ambari.config-changes.file=ambari-config-changes.log +ambari.alerts.file=ambari-alerts.log + log4j.rootLogger=INFO,file # Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender -log4j.appender.file.File=/var/log/ambari-server/ambari-server.log +log4j.appender.file.File=${ambari.log.dir}/${ambari.log.file} log4j.appender.file.MaxFileSize=80MB log4j.appender.file.MaxBackupIndex=60 log4j.appender.file.layout=org.apache.log4j.PatternLayout @@ -32,10 +37,18 @@ log4j.appender.file.layout.ConversionPattern=%d{DATE} %5p [%t] %c{1}:%L - %m%n log4j.logger.configchange=INFO,configchange log4j.additivity.configchange=false log4j.appender.configchange=org.apache.log4j.FileAppender -log4j.appender.configchange.File=/var/log/ambari-server/ambari-config-changes.log +log4j.appender.configchange.File=${ambari.log.dir}/${ambari.config-changes.file} log4j.appender.configchange.layout=org.apache.log4j.PatternLayout log4j.appender.configchange.layout.ConversionPattern=%d{ISO8601} %5p - %m%n +# Log alert state changes +log4j.logger.alerts=INFO,alerts +log4j.additivity.alerts=false +log4j.appender.alerts=org.apache.log4j.FileAppender +log4j.appender.alerts.File=${ambari.log.dir}/${ambari.alerts.file} +log4j.appender.alerts.layout=org.apache.log4j.PatternLayout +log4j.appender.alerts.layout.ConversionPattern=%d{ISO8601} %m%n + log4j.logger.org.apache.hadoop.yarn.client=WARN log4j.logger.org.apache.slider.common.tools.SliderUtils=WARN log4j.logger.org.apache.ambari.server.security.authorization=WARN http://git-wip-us.apache.org/repos/asf/ambari/blob/4872d4e8/ambari-server/conf/windows/log4j.properties ---------------------------------------------------------------------- diff --git a/ambari-server/conf/windows/log4j.properties b/ambari-server/conf/windows/log4j.properties index e0c602d..4b5232f 100644 --- a/ambari-server/conf/windows/log4j.properties +++ b/ambari-server/conf/windows/log4j.properties @@ -21,6 +21,7 @@ ambari.root.logger=INFO,DRFA ambari.log.dir=\\var\\log\\ambari-server-1.3.0-SNAPSHOT\\ ambari.log.file=ambari-server.log ambari.config-changes.file=ambari-config-changes.log +ambari.alerts.file=ambari-alerts.log # Define the root logger to the system property "ambari.root.logger". @@ -66,3 +67,11 @@ log4j.appender.configchange=org.apache.log4j.FileAppender log4j.appender.configchange.File=${ambari.log.dir}\${ambari.config-changes.file} log4j.appender.configchange.layout=org.apache.log4j.PatternLayout log4j.appender.configchange.layout.ConversionPattern=%d{ISO8601} %5p - %m%n + +# Log alert state changes +log4j.logger.alerts=INFO,alerts +log4j.additivity.alerts=false +log4j.appender.alerts=org.apache.log4j.FileAppender +log4j.appender.alerts.File=${ambari.log.dir}\${ambari.alerts.file} +log4j.appender.alerts.layout=org.apache.log4j.PatternLayout +log4j.appender.alerts.layout.ConversionPattern=%d{ISO8601} %m%n http://git-wip-us.apache.org/repos/asf/ambari/blob/4872d4e8/ambari-server/src/main/conf/log4j.properties ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/conf/log4j.properties b/ambari-server/src/main/conf/log4j.properties index deb9dd9..6d53ca3 100644 --- a/ambari-server/src/main/conf/log4j.properties +++ b/ambari-server/src/main/conf/log4j.properties @@ -19,8 +19,9 @@ # Define some default values that can be overridden by system properties ambari.root.logger=INFO,DRFA ambari.log.dir=/var/log/ambari-server -ambari.log.file=ambari.log +ambari.log.file=ambari-server.log ambari.config-changes.file=ambari-config-changes.log +ambari.alerts.file=ambari-alerts.log # Define the root logger to the system property "ambari.root.logger". @@ -66,3 +67,12 @@ log4j.appender.configchange=org.apache.log4j.FileAppender log4j.appender.configchange.File=${ambari.log.dir}/${ambari.config-changes.file} log4j.appender.configchange.layout=org.apache.log4j.PatternLayout log4j.appender.configchange.layout.ConversionPattern=%d{ISO8601} %5p - %m%n + +# Log alert state changes +log4j.logger.alerts=INFO,alerts +log4j.additivity.alerts=false +log4j.appender.alerts=org.apache.log4j.FileAppender +log4j.appender.alerts.File=${ambari.log.dir}/${ambari.alerts.file} +log4j.appender.alerts.layout=org.apache.log4j.PatternLayout +log4j.appender.alerts.layout.ConversionPattern=%d{ISO8601} %m%n + http://git-wip-us.apache.org/repos/asf/ambari/blob/4872d4e8/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java index d84c449..d3ed1b4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java @@ -31,11 +31,12 @@ import org.apache.ambari.server.orm.entities.AlertGroupEntity; import org.apache.ambari.server.orm.entities.AlertHistoryEntity; import org.apache.ambari.server.orm.entities.AlertNoticeEntity; import org.apache.ambari.server.orm.entities.AlertTargetEntity; +import org.apache.ambari.server.state.Alert; import org.apache.ambari.server.state.AlertState; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.NotificationState; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.Subscribe; @@ -54,7 +55,19 @@ public class AlertStateChangedListener { /** * Logger. */ - private static Log LOG = LogFactory.getLog(AlertStateChangedListener.class); + private static Logger LOG = LoggerFactory.getLogger(AlertStateChangedListener.class); + + /** + * A logger that is only for logging alert state changes so that there is an + * audit trail in the event that definitions/history are removed. + */ + private static final Logger ALERT_LOG = LoggerFactory.getLogger("alerts"); + + /** + * [CRITICAL] [HDFS] [namenode_hdfs_blocks_health] (NameNode Blocks Health) + * Total Blocks:[100], Missing Blocks:[6] + */ + private static final String ALERT_LOG_MESSAGE = "[{}] [{}] [{}] ({}) {}"; /** * Used for looking up groups and targets. @@ -83,7 +96,20 @@ public class AlertStateChangedListener { @Subscribe @AllowConcurrentEvents public void onAlertEvent(AlertStateChangeEvent event) { - LOG.debug(event); + Alert alert = event.getAlert(); + AlertHistoryEntity history = event.getNewHistoricalEntry(); + AlertDefinitionEntity definition = history.getAlertDefinition(); + + // log to the alert audit log so there is physical record even if + // definitions and historical enties are removed + ALERT_LOG.info(ALERT_LOG_MESSAGE, alert.getState(), + definition.getServiceName(), definition.getDefinitionName(), + definition.getLabel(), alert.getText()); + + // normal logging for Ambari + if (LOG.isDebugEnabled()) { + LOG.debug("An alert has changed state: {}", event); + } // don't create any outbound alert notices if in MM AlertCurrentEntity currentAlert = event.getCurrentAlert(); @@ -92,9 +118,6 @@ public class AlertStateChangedListener { return; } - AlertHistoryEntity history = event.getNewHistoricalEntry(); - AlertDefinitionEntity definition = history.getAlertDefinition(); - List<AlertGroupEntity> groups = m_alertsDispatchDao.findGroupsByDefinition(definition); // for each group, determine if there are any targets that need to receive