http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/FLUME/package/templates/log4j.properties.j2 ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/FLUME/package/templates/log4j.properties.j2 b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/FLUME/package/templates/log4j.properties.j2 new file mode 100644 index 0000000..3b34db8 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/FLUME/package/templates/log4j.properties.j2 @@ -0,0 +1,67 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +# Define some default values that can be overridden by system properties. +# +# For testing, it may also be convenient to specify +# -Dflume.root.logger=DEBUG,console when launching flume. + +#flume.root.logger=DEBUG,console +flume.root.logger=INFO,LOGFILE +flume.log.dir={{flume_log_dir}} +flume.log.file=flume-{{agent_name}}.log + +log4j.logger.org.apache.flume.lifecycle = INFO +log4j.logger.org.jboss = WARN +log4j.logger.org.mortbay = INFO +log4j.logger.org.apache.avro.ipc.NettyTransceiver = WARN +log4j.logger.org.apache.hadoop = INFO + +# Define the root logger to the system property "flume.root.logger". +log4j.rootLogger=${flume.root.logger} + + +# Stock log4j rolling file appender +# Default log rotation configuration +log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender +log4j.appender.LOGFILE.MaxFileSize=100MB +log4j.appender.LOGFILE.MaxBackupIndex=10 +log4j.appender.LOGFILE.File=${flume.log.dir}/${flume.log.file} +log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout +log4j.appender.LOGFILE.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-5p [%t] (%C.%M:%L) %x - %m%n + + +# Warning: If you enable the following appender it will fill up your disk if you don't have a cleanup job! +# This uses the updated rolling file appender from log4j-extras that supports a reliable time-based rolling policy. +# See http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html +# Add "DAILY" to flume.root.logger above if you want to use this +log4j.appender.DAILY=org.apache.log4j.rolling.RollingFileAppender +log4j.appender.DAILY.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy +log4j.appender.DAILY.rollingPolicy.ActiveFileName=${flume.log.dir}/${flume.log.file} +log4j.appender.DAILY.rollingPolicy.FileNamePattern=${flume.log.dir}/${flume.log.file}.%d{yyyy-MM-dd} +log4j.appender.DAILY.layout=org.apache.log4j.PatternLayout +log4j.appender.DAILY.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-5p [%t] (%C.%M:%L) %x - %m%n + + +# console +# Add "console" to flume.root.logger above if you want to use this +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.target=System.err +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n
http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/configuration/ganglia-env.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/configuration/ganglia-env.xml b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/configuration/ganglia-env.xml new file mode 100644 index 0000000..3328acf --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/configuration/ganglia-env.xml @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +--> + +<configuration> + <property> + <name>ganglia_conf_dir</name> + <value>/etc/ganglia/hdp</value> + <description>Config directory for Ganglia</description> + </property> + <property> + <name>ganglia_runtime_dir</name> + <value>/var/run/ganglia/hdp</value> + <description>Run directories for Ganglia</description> + </property> + <property> + <name>gmetad_user</name> + <value>nobody</value> + <property-type>USER GROUP</property-type> + <description>User </description> + </property> + <property> + <name>gmond_user</name> + <value>nobody</value> + <property-type>USER GROUP</property-type> + <description>User </description> + </property> + <property> + <name>rrdcached_base_dir</name> + <value>/var/lib/ganglia/rrds</value> + <description>Default directory for saving the rrd files on ganglia server</description> + </property> + <property> + <name>rrdcached_timeout</name> + <value>3600</value> + <description>(-w) Data is written to disk every timeout seconds. If this option is not specified the default interval of 300 seconds will be used.</description> + </property> + <property> + <name>rrdcached_flush_timeout</name> + <value>7200</value> + <description>(-f) Every timeout seconds the entire cache is searched for old values which are written to disk. This only concerns files to which updates have stopped, so setting this to a high value, such as 3600 seconds, is acceptable in most cases. This timeout defaults to 3600 seconds.</description> + </property> + <property> + <name>rrdcached_delay</name> + <value>1800</value> + <description>(-z) If specified, rrdcached will delay writing of each RRD for a random number of seconds in the range [0,delay). This will avoid too many writes being queued simultaneously. This value should be no greater than the value specified in -w. By default, there is no delay.</description> + </property> + <property> + <name>rrdcached_write_threads</name> + <value>4</value> + <description>(-t) Specifies the number of threads used for writing RRD files. The default is 4. Increasing this number will allow rrdcached to have more simultaneous I/O requests into the kernel. This may allow the kernel to re-order disk writes, resulting in better disk throughput.</description> + </property> + <property> + <name>additional_clusters</name> + <value> </value> + <description>Add additional desired Ganglia metrics cluster in the form "name1:port1,name2:port2". Ensure that the names and ports are unique across all cluster and ports are available on ganglia server host. Ambari has reserved ports 8667-8669 within its own pool.</description> + </property> + +</configuration> http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/metainfo.xml b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/metainfo.xml new file mode 100644 index 0000000..4e96ade --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/metainfo.xml @@ -0,0 +1,127 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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. +--> +<metainfo> + <schemaVersion>2.0</schemaVersion> + <services> + <service> + <name>GANGLIA</name> + <displayName>Ganglia</displayName> + <comment>Ganglia Metrics Collection system (<a href="http://oss.oetiker.ch/rrdtool/" target="_blank">RRDTool</a> will be installed too)</comment> + <version>3.5.0</version> + <components> + <component> + <name>GANGLIA_SERVER</name> + <displayName>Ganglia Server</displayName> + <category>MASTER</category> + <cardinality>1</cardinality> + <commandScript> + <script>scripts/ganglia_server.py</script> + <scriptType>PYTHON</scriptType> + <timeout>600</timeout> + </commandScript> + </component> + + <component> + <name>GANGLIA_MONITOR</name> + <displayName>Ganglia Monitor</displayName> + <category>SLAVE</category> + <cardinality>ALL</cardinality> + <auto-deploy> + <enabled>true</enabled> + </auto-deploy> + <commandScript> + <script>scripts/ganglia_monitor.py</script> + <scriptType>PYTHON</scriptType> + <timeout>600</timeout> + </commandScript> + </component> + </components> + <osSpecifics> + <osSpecific> + <osFamily>redhat5,redhat6,suse11</osFamily> + <packages> + <package> + <name>python-rrdtool-1.4.5</name> + </package> + <package> + <name>libganglia-3.5.0-99</name> + </package> + <package> + <name>ganglia-devel-3.5.0-99</name> + </package> + <package> + <name>ganglia-gmetad-3.5.0-99</name> + </package> + <package> + <name>ganglia-web-3.5.7-99.noarch</name> + </package> + <package> + <name>ganglia-gmond-3.5.0-99</name> + </package> + <package> + <name>ganglia-gmond-modules-python-3.5.0-99</name> + </package> + </packages> + </osSpecific> + <osSpecific> + <osFamily>ubuntu12</osFamily> + <packages> + <package> + <name>python-rrdtool</name> + </package> + <package> + <name>gmetad</name> + </package> + <package> + <name>ganglia-webfrontend</name> + </package> + <package> + <name>ganglia-monitor-python</name> + </package> + <package> + <name>rrdcached</name> + </package> + </packages> + </osSpecific> + <osSpecific> + <osFamily>suse11</osFamily> + <packages> + <package> + <name>apache2</name> + </package> + <package> + <name>apache2?mod_php*</name> + </package> + </packages> + </osSpecific> + <osSpecific> + <osFamily>redhat5,redhat6</osFamily> + <packages> + <package> + <name>httpd</name> + </package> + </packages> + </osSpecific> + </osSpecifics> + <configuration-dependencies> + <config-type>ganglia-env</config-type> + </configuration-dependencies> + <monitoringService>true</monitoringService> + </service> + </services> +</metainfo> http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmetad.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmetad.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmetad.sh new file mode 100644 index 0000000..f45e371 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmetad.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +source ./gmetadLib.sh; + +# Before checking gmetad, check rrdcached. +./checkRrdcached.sh; + +gmetadRunningPid=`getGmetadRunningPid`; + +if [ -n "${gmetadRunningPid}" ] +then + echo "${GMETAD_BIN} running with PID ${gmetadRunningPid}"; +else + echo "Failed to find running ${GMETAD_BIN}"; + exit 1; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmond.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmond.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmond.sh new file mode 100644 index 0000000..fbf524a --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkGmond.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +# Pulls in gangliaLib.sh as well, so we can skip pulling it in again. +source ./gmondLib.sh; + +function checkGmondForCluster() +{ + gmondClusterName=${1}; + + gmondCoreConfFileName=`getGmondCoreConfFileName ${gmondClusterName}`; + + # Skip over (purported) Clusters that don't have their core conf file present. + if [ -e "${gmondCoreConfFileName}" ] + then + gmondRunningPid=`getGmondRunningPid ${gmondClusterName}`; + + if [ -n "${gmondRunningPid}" ] + then + echo "${GMOND_BIN} for cluster ${gmondClusterName} running with PID ${gmondRunningPid}"; + else + echo "Failed to find running ${GMOND_BIN} for cluster ${gmondClusterName}"; + exit 1; + fi + fi +} + +# main() +gmondClusterName=${1}; + +if [ "x" == "x${gmondClusterName}" ] +then + # No ${gmondClusterName} passed in as command-line arg, so check + # all the gmonds we know about. + for gmondClusterName in `getConfiguredGangliaClusterNames` + do + checkGmondForCluster ${gmondClusterName}; + done +else + # Just check the one ${gmondClusterName} that was asked for. + checkGmondForCluster ${gmondClusterName}; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkRrdcached.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkRrdcached.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkRrdcached.sh new file mode 100644 index 0000000..1e0c2e2 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/checkRrdcached.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +source ./rrdcachedLib.sh; + +rrdcachedRunningPid=`getRrdcachedRunningPid`; + +if [ -n "${rrdcachedRunningPid}" ] +then + echo "${RRDCACHED_BIN} running with PID ${rrdcachedRunningPid}"; +else + echo "Failed to find running ${RRDCACHED_BIN}"; + exit 1; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetad.init ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetad.init b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetad.init new file mode 100644 index 0000000..20b388e --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetad.init @@ -0,0 +1,73 @@ +#!/bin/sh +# chkconfig: 2345 70 40 +# description: hdp-gmetad startup script +# processname: hdp-gmetad +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +# Remember to keep this in-sync with the definition of +# GANGLIA_RUNTIME_COMPONENTS_UNPACK_DIR in monrpmInstaller.sh. +HDP_GANGLIA_RUNTIME_COMPONENTS_DIR=/usr/libexec/hdp/ganglia +HDP_GANLIA_GMETAD_STARTER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/startGmetad.sh +HDP_GANLIA_GMETAD_STOPPER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/stopGmetad.sh +HDP_GANLIA_GMETAD_CHECKER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/checkGmetad.sh + +RETVAL=0 + +case "$1" in + start) + echo "=============================" + echo "Starting hdp-gmetad..." + echo "=============================" + [ -f ${HDP_GANLIA_GMETAD_STARTER} ] || exit 1 + eval "${HDP_GANLIA_GMETAD_STARTER}" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/hdp-gmetad + ;; + + stop) + echo "==================================" + echo "Shutting down hdp-gmetad..." + echo "==================================" + [ -f ${HDP_GANLIA_GMETAD_STOPPER} ] || exit 1 + eval "${HDP_GANLIA_GMETAD_STOPPER}" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/hdp-gmetad + ;; + + restart|reload) + $0 stop + $0 start + RETVAL=$? + ;; + status) + echo "=======================================" + echo "Checking status of hdp-gmetad..." + echo "=======================================" + [ -f ${HDP_GANLIA_GMETAD_CHECKER} ] || exit 1 + eval "${HDP_GANLIA_GMETAD_CHECKER}" + RETVAL=$? + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 +esac + +exit $RETVAL http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetadLib.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetadLib.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetadLib.sh new file mode 100644 index 0000000..6a24bed --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmetadLib.sh @@ -0,0 +1,204 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Slurp in all our user-customizable settings. +source ./gangliaEnv.sh; + +# Get access to Ganglia-wide constants etc. +source ./gangliaLib.sh; + +GMETAD_BIN=/usr/sbin/gmetad; +GMETAD_CONF_FILE=${GANGLIA_CONF_DIR}/gmetad.conf; +GMETAD_PID_FILE=${GANGLIA_RUNTIME_DIR}/gmetad.pid; + +function getGmetadLoggedPid() +{ + if [ -e "${GMETAD_PID_FILE}" ] + then + echo `cat ${GMETAD_PID_FILE}`; + fi +} + +function getGmetadRunningPid() +{ + gmetadLoggedPid=`getGmetadLoggedPid`; + + if [ -n "${gmetadLoggedPid}" ] + then + echo `ps -o pid=MYPID -p ${gmetadLoggedPid} | tail -1 | awk '{print $1}' | grep -v MYPID`; + fi +} + +function generateGmetadConf() +{ + now=`date`; + + cat <<END_OF_GMETAD_CONF_1 +#################### Generated by ${0} on ${now} #################### +# +#------------------------------------------------------------------------------- +# Setting the debug_level to 1 will keep daemon in the forground and +# show only error messages. Setting this value higher than 1 will make +# gmetad output debugging information and stay in the foreground. +# default: 0 +# debug_level 10 +# +#------------------------------------------------------------------------------- +# What to monitor. The most important section of this file. +# +# The data_source tag specifies either a cluster or a grid to +# monitor. If we detect the source is a cluster, we will maintain a complete +# set of RRD databases for it, which can be used to create historical +# graphs of the metrics. If the source is a grid (it comes from another gmetad), +# we will only maintain summary RRDs for it. +# +# Format: +# data_source "my cluster" [polling interval] address1:port addreses2:port ... +# +# The keyword 'data_source' must immediately be followed by a unique +# string which identifies the source, then an optional polling interval in +# seconds. The source will be polled at this interval on average. +# If the polling interval is omitted, 15sec is asssumed. +# +# If you choose to set the polling interval to something other than the default, +# note that the web frontend determines a host as down if its TN value is less +# than 4 * TMAX (20sec by default). Therefore, if you set the polling interval +# to something around or greater than 80sec, this will cause the frontend to +# incorrectly display hosts as down even though they are not. +# +# A list of machines which service the data source follows, in the +# format ip:port, or name:port. If a port is not specified then 8649 +# (the default gmond port) is assumed. +# default: There is no default value +# +# data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655 +# data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651 +# data_source "another source" 1.3.4.7:8655 1.3.4.8 +END_OF_GMETAD_CONF_1 + + # Get info about all the configured Ganglia clusters. + getGangliaClusterInfo | while read gangliaClusterInfoLine + do + # From each, parse out ${gmondClusterName}, ${gmondMasterIP} and ${gmondPort}... + read gmondClusterName gmondMasterIP gmondPort <<<`echo ${gangliaClusterInfoLine}`; + # ...and generate a corresponding data_source line for gmetad.conf. + echo "data_source \"${gmondClusterName}\" ${gmondMasterIP}:${gmondPort}"; + done + + cat <<END_OF_GMETAD_CONF_2 +# +# Round-Robin Archives +# You can specify custom Round-Robin archives here (defaults are listed below) +# +# Old Default RRA: Keep 1 hour of metrics at 15 second resolution. 1 day at 6 minute +# RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \ +# "RRA:AVERAGE:0.5:5760:374" +# New Default RRA +# Keep 5856 data points at 15 second resolution assuming 15 second (default) polling. That's 1 day +# Two weeks of data points at 1 minute resolution (average) +#RRAs "RRA:AVERAGE:0.5:1:5856" "RRA:AVERAGE:0.5:4:20160" "RRA:AVERAGE:0.5:40:52704" +# Retaining existing resolution +RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \ + "RRA:AVERAGE:0.5:5760:374" +# +#------------------------------------------------------------------------------- +# Scalability mode. If on, we summarize over downstream grids, and respect +# authority tags. If off, we take on 2.5.0-era behavior: we do not wrap our output +# in <GRID></GRID> tags, we ignore all <GRID> tags we see, and always assume +# we are the "authority" on data source feeds. This approach does not scale to +# large groups of clusters, but is provided for backwards compatibility. +# default: on +# scalable off +# +#------------------------------------------------------------------------------- +# The name of this Grid. All the data sources above will be wrapped in a GRID +# tag with this name. +# default: unspecified +gridname "HDP_GRID" +# +#------------------------------------------------------------------------------- +# The authority URL for this grid. Used by other gmetads to locate graphs +# for our data sources. Generally points to a ganglia/ +# website on this machine. +# default: "http://hostname/ganglia/", +# where hostname is the name of this machine, as defined by gethostname(). +# authority "http://mycluster.org/newprefix/" +# +#------------------------------------------------------------------------------- +# List of machines this gmetad will share XML with. Localhost +# is always trusted. +# default: There is no default value +# trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org +# +#------------------------------------------------------------------------------- +# If you want any host which connects to the gmetad XML to receive +# data, then set this value to "on" +# default: off +# all_trusted on +# +#------------------------------------------------------------------------------- +# If you don't want gmetad to setuid then set this to off +# default: on +# setuid off +# +#------------------------------------------------------------------------------- +# User gmetad will setuid to (defaults to "nobody") +# default: "nobody" +setuid_username "${GMETAD_USER}" +# +#------------------------------------------------------------------------------- +# Umask to apply to created rrd files and grid directory structure +# default: 0 (files are public) +# umask 022 +# +#------------------------------------------------------------------------------- +# The port gmetad will answer requests for XML +# default: 8651 +# xml_port 8651 +# +#------------------------------------------------------------------------------- +# The port gmetad will answer queries for XML. This facility allows +# simple subtree and summation views of the XML tree. +# default: 8652 +# interactive_port 8652 +# +#------------------------------------------------------------------------------- +# The number of threads answering XML requests +# default: 4 +# server_threads 10 +# +#------------------------------------------------------------------------------- +# Where gmetad stores its round-robin databases +# default: "/var/lib/ganglia/rrds" +rrd_rootdir "${RRD_ROOTDIR}" +# +#------------------------------------------------------------------------------- +# In earlier versions of gmetad, hostnames were handled in a case +# sensitive manner +# If your hostname directories have been renamed to lower case, +# set this option to 0 to disable backward compatibility. +# From version 3.2, backwards compatibility will be disabled by default. +# default: 1 (for gmetad < 3.2) +# default: 0 (for gmetad >= 3.2) +case_sensitive_hostnames 1 +END_OF_GMETAD_CONF_2 +} http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmond.init ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmond.init b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmond.init new file mode 100644 index 0000000..afb7026 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmond.init @@ -0,0 +1,73 @@ +#!/bin/sh +# chkconfig: 2345 70 40 +# description: hdp-gmond startup script +# processname: hdp-gmond +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +# Remember to keep this in-sync with the definition of +# GANGLIA_RUNTIME_COMPONENTS_UNPACK_DIR in monrpmInstaller.sh. +HDP_GANGLIA_RUNTIME_COMPONENTS_DIR=/usr/libexec/hdp/ganglia +HDP_GANLIA_GMOND_STARTER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/startGmond.sh +HDP_GANLIA_GMOND_STOPPER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/stopGmond.sh +HDP_GANLIA_GMOND_CHECKER=${HDP_GANGLIA_RUNTIME_COMPONENTS_DIR}/checkGmond.sh + +RETVAL=0 + +case "$1" in + start) + echo "=============================" + echo "Starting hdp-gmond..." + echo "=============================" + [ -f ${HDP_GANLIA_GMOND_STARTER} ] || exit 1 + eval "${HDP_GANLIA_GMOND_STARTER}" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/hdp-gmond + ;; + + stop) + echo "==================================" + echo "Shutting down hdp-gmond..." + echo "==================================" + [ -f ${HDP_GANLIA_GMOND_STOPPER} ] || exit 1 + eval "${HDP_GANLIA_GMOND_STOPPER}" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/hdp-gmond + ;; + + restart|reload) + $0 stop + $0 start + RETVAL=$? + ;; + status) + echo "=======================================" + echo "Checking status of hdp-gmond..." + echo "=======================================" + [ -f ${HDP_GANLIA_GMOND_CHECKER} ] || exit 1 + eval "${HDP_GANLIA_GMOND_CHECKER}" + RETVAL=$? + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 +esac + +exit $RETVAL http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmondLib.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmondLib.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmondLib.sh new file mode 100644 index 0000000..e7ea83f --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/gmondLib.sh @@ -0,0 +1,539 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Slurp in all our user-customizable settings. +source ./gangliaEnv.sh; + +# Get access to Ganglia-wide constants etc. +source ./gangliaLib.sh; + +GMOND_BIN=/usr/sbin/gmond; +GMOND_CORE_CONF_FILE=gmond.core.conf; +GMOND_MASTER_CONF_FILE=gmond.master.conf; +GMOND_SLAVE_CONF_FILE=gmond.slave.conf; +GMOND_PID_FILE=gmond.pid; + +# Functions. +function getGmondCoreConfFileName() +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + # ${clusterName} is not empty. + echo "${GANGLIA_CONF_DIR}/${clusterName}/${GMOND_CORE_CONF_FILE}"; + else + echo "${GANGLIA_CONF_DIR}/${GMOND_CORE_CONF_FILE}"; + fi +} + +function getGmondMasterConfFileName() +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + # ${clusterName} is not empty. + echo "${GANGLIA_CONF_DIR}/${clusterName}/conf.d/${GMOND_MASTER_CONF_FILE}"; + else + echo "${GANGLIA_CONF_DIR}/conf.d/${GMOND_MASTER_CONF_FILE}"; + fi +} + +function getGmondSlaveConfFileName() +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + # ${clusterName} is not empty. + echo "${GANGLIA_CONF_DIR}/${clusterName}/conf.d/${GMOND_SLAVE_CONF_FILE}"; + else + echo "${GANGLIA_CONF_DIR}/conf.d/${GMOND_SLAVE_CONF_FILE}"; + fi +} + +function getGmondPidFileName() +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + # ${clusterName} is not empty. + echo "${GANGLIA_RUNTIME_DIR}/${clusterName}/${GMOND_PID_FILE}"; + else + echo "${GANGLIA_RUNTIME_DIR}/${GMOND_PID_FILE}"; + fi +} + +function getGmondLoggedPid() +{ + gmondPidFile=`getGmondPidFileName ${1}`; + + if [ -e "${gmondPidFile}" ] + then + echo `cat ${gmondPidFile}`; + fi +} + +function getGmondRunningPid() +{ + gmondLoggedPid=`getGmondLoggedPid ${1}`; + + if [ -n "${gmondLoggedPid}" ] + then + echo `ps -o pid=MYPID -p ${gmondLoggedPid} | tail -1 | awk '{print $1}' | grep -v MYPID`; + fi +} + +function generateGmondCoreConf() +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + read gmondClusterName gmondMasterIP gmondPort <<<`getGangliaClusterInfo ${clusterName}`; + + # Check that all of ${gmondClusterName} and ${gmondMasterIP} and ${gmondPort} are populated. + if [ "x" != "x${gmondClusterName}" -a "x" != "x${gmondMasterIP}" -a "x" != "x${gmondPort}" ] + then + now=`date`; + + cat << END_OF_GMOND_CORE_CONF +#################### Generated by ${0} on ${now} #################### +# +/* This configuration is as close to 2.5.x default behavior as possible + The values closely match ./gmond/metric.h definitions in 2.5.x */ +globals { + daemonize = yes + setuid = yes + user = ${GMOND_USER} + debug_level = 0 + max_udp_msg_len = 1472 + mute = no + deaf = no + allow_extra_data = yes + host_dmax = 0 /*secs */ + host_tmax = 20 /*secs */ + cleanup_threshold = 300 /*secs */ + gexec = no + send_metadata_interval = 30 /*secs */ +} + +/* + * The cluster attributes specified will be used as part of the <CLUSTER> + * tag that will wrap all hosts collected by this instance. + */ +cluster { + name = "${gmondClusterName}" + owner = "unspecified" + latlong = "unspecified" + url = "unspecified" +} + +/* The host section describes attributes of the host, like the location */ +host { + location = "unspecified" +} + +/* You can specify as many tcp_accept_channels as you like to share + * an XML description of the state of the cluster. + * + * At the very least, every gmond must expose its XML state to + * queriers from localhost. + * Also we use this port for Nagios monitoring + */ +tcp_accept_channel { + bind = 0.0.0.0 + port = ${gmondPort} +} + +/* Each metrics module that is referenced by gmond must be specified and + loaded. If the module has been statically linked with gmond, it does + not require a load path. However all dynamically loadable modules must + include a load path. */ +modules { + module { + name = "core_metrics" + } + module { + name = "cpu_module" + path = "${MODULES_DIR}/modcpu.so" + } + module { + name = "disk_module" + path = "${MODULES_DIR}/moddisk.so" + } + module { + name = "load_module" + path = "${MODULES_DIR}/modload.so" + } + module { + name = "mem_module" + path = "${MODULES_DIR}/modmem.so" + } + module { + name = "net_module" + path = "${MODULES_DIR}/modnet.so" + } + module { + name = "proc_module" + path = "${MODULES_DIR}/modproc.so" + } + module { + name = "sys_module" + path = "${MODULES_DIR}/modsys.so" + } +} + +/* The old internal 2.5.x metric array has been replaced by the following + collection_group directives. What follows is the default behavior for + collecting and sending metrics that is as close to 2.5.x behavior as + possible. */ + +/* This collection group will cause a heartbeat (or beacon) to be sent every + 20 seconds. In the heartbeat is the GMOND_STARTED data which expresses + the age of the running gmond. */ +collection_group { + collect_once = yes + time_threshold = 20 + metric { + name = "heartbeat" + } +} + +/* This collection group will send general info about this host total memory every + 180 secs. + This information doesn't change between reboots and is only collected + once. This information needed for heatmap showing */ + collection_group { + collect_once = yes + time_threshold = 180 + metric { + name = "mem_total" + title = "Memory Total" + } + } + +/* This collection group will send general info about this host every + 1200 secs. + This information doesn't change between reboots and is only collected + once. */ +collection_group { + collect_once = yes + time_threshold = 1200 + metric { + name = "cpu_num" + title = "CPU Count" + } + metric { + name = "cpu_speed" + title = "CPU Speed" + } + /* Should this be here? Swap can be added/removed between reboots. */ + metric { + name = "swap_total" + title = "Swap Space Total" + } + metric { + name = "boottime" + title = "Last Boot Time" + } + metric { + name = "machine_type" + title = "Machine Type" + } + metric { + name = "os_name" + title = "Operating System" + } + metric { + name = "os_release" + title = "Operating System Release" + } + metric { + name = "location" + title = "Location" + } +} + +/* This collection group will send the status of gexecd for this host + every 300 secs.*/ +/* Unlike 2.5.x the default behavior is to report gexecd OFF. */ +collection_group { + collect_once = yes + time_threshold = 300 + metric { + name = "gexec" + title = "Gexec Status" + } +} + +/* This collection group will collect the CPU status info every 20 secs. + The time threshold is set to 90 seconds. In honesty, this + time_threshold could be set significantly higher to reduce + unneccessary network chatter. */ +collection_group { + collect_every = 20 + time_threshold = 90 + /* CPU status */ + metric { + name = "cpu_user" + value_threshold = "1.0" + title = "CPU User" + } + metric { + name = "cpu_system" + value_threshold = "1.0" + title = "CPU System" + } + metric { + name = "cpu_idle" + value_threshold = "5.0" + title = "CPU Idle" + } + metric { + name = "cpu_nice" + value_threshold = "1.0" + title = "CPU Nice" + } + metric { + name = "cpu_aidle" + value_threshold = "5.0" + title = "CPU aidle" + } + metric { + name = "cpu_wio" + value_threshold = "1.0" + title = "CPU wio" + } + /* The next two metrics are optional if you want more detail... + ... since they are accounted for in cpu_system. + metric { + name = "cpu_intr" + value_threshold = "1.0" + title = "CPU intr" + } + metric { + name = "cpu_sintr" + value_threshold = "1.0" + title = "CPU sintr" + } + */ +} + +collection_group { + collect_every = 20 + time_threshold = 90 + /* Load Averages */ + metric { + name = "load_one" + value_threshold = "1.0" + title = "One Minute Load Average" + } + metric { + name = "load_five" + value_threshold = "1.0" + title = "Five Minute Load Average" + } + metric { + name = "load_fifteen" + value_threshold = "1.0" + title = "Fifteen Minute Load Average" + } +} + +/* This group collects the number of running and total processes */ +collection_group { + collect_every = 80 + time_threshold = 950 + metric { + name = "proc_run" + value_threshold = "1.0" + title = "Total Running Processes" + } + metric { + name = "proc_total" + value_threshold = "1.0" + title = "Total Processes" + } +} + +/* This collection group grabs the volatile memory metrics every 40 secs and + sends them at least every 180 secs. This time_threshold can be increased + significantly to reduce unneeded network traffic. */ +collection_group { + collect_every = 40 + time_threshold = 180 + metric { + name = "mem_free" + value_threshold = "1024.0" + title = "Free Memory" + } + metric { + name = "mem_shared" + value_threshold = "1024.0" + title = "Shared Memory" + } + metric { + name = "mem_buffers" + value_threshold = "1024.0" + title = "Memory Buffers" + } + metric { + name = "mem_cached" + value_threshold = "1024.0" + title = "Cached Memory" + } + metric { + name = "swap_free" + value_threshold = "1024.0" + title = "Free Swap Space" + } +} + +collection_group { + collect_every = 40 + time_threshold = 300 + metric { + name = "bytes_out" + value_threshold = 4096 + title = "Bytes Sent" + } + metric { + name = "bytes_in" + value_threshold = 4096 + title = "Bytes Received" + } + metric { + name = "pkts_in" + value_threshold = 256 + title = "Packets Received" + } + metric { + name = "pkts_out" + value_threshold = 256 + title = "Packets Sent" + } +} + + +collection_group { + collect_every = 40 + time_threshold = 180 + metric { + name = "disk_free" + value_threshold = 1.0 + title = "Disk Space Available" + } + metric { + name = "part_max_used" + value_threshold = 1.0 + title = "Maximum Disk Space Used" + } + metric { + name = "disk_total" + value_threshold = 1.0 + title = "Total Disk Space" + } +} + +udp_recv_channel { + port = 0 +} + + +include ("${GANGLIA_CONF_DIR}/${gmondClusterName}/conf.d/*.conf") +END_OF_GMOND_CORE_CONF + else + return 2; + fi + else + return 1; + fi +} + +function generateGmondMasterConf +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + read gmondClusterName gmondMasterIP gmondPort <<<`getGangliaClusterInfo ${clusterName}`; + + # Check that all of ${gmondClusterName} and ${gmondMasterIP} and ${gmondPort} are populated. + if [ "x" != "x${gmondClusterName}" -a "x" != "x${gmondMasterIP}" -a "x" != "x${gmondPort}" ] + then + now=`date`; + + cat << END_OF_GMOND_MASTER_CONF +#################### Generated by ${0} on ${now} #################### +/* Masters only receive; they never send. */ +udp_recv_channel { + bind = ${gmondMasterIP} + port = ${gmondPort} +} + +END_OF_GMOND_MASTER_CONF + else + return 2; + fi + else + return 1; + fi +} + +function generateGmondSlaveConf +{ + clusterName=${1}; + + if [ "x" != "x${clusterName}" ] + then + read gmondClusterName gmondMasterIP gmondPort <<<`getGangliaClusterInfo ${clusterName}`; + + # Check that all of ${gmondClusterName} and ${gmondMasterIP} and ${gmondPort} are populated. + if [ "x" != "x${gmondClusterName}" -a "x" != "x${gmondMasterIP}" -a "x" != "x${gmondPort}" ] + then + now=`date`; + + cat << END_OF_GMOND_SLAVE_CONF +#################### Generated by ${0} on ${now} #################### +/* Slaves only send; they never receive. */ +udp_send_channel { + #bind_hostname = yes # Highly recommended, soon to be default. + # This option tells gmond to use a source address + # that resolves to the machine's hostname. Without + # this, the metrics may appear to come from any + # interface and the DNS names associated with + # those IPs will be used to create the RRDs. + host = ${gmondMasterIP} + port = ${gmondPort} + ttl = 1 +} +END_OF_GMOND_SLAVE_CONF + else + return 2; + fi + else + return 1; + fi +} http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/rrdcachedLib.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/rrdcachedLib.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/rrdcachedLib.sh new file mode 100644 index 0000000..a070fca --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/rrdcachedLib.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get access to Ganglia-wide constants etc. +source ./gangliaLib.sh; + +RRDCACHED_BIN=/usr/bin/rrdcached; +RRDCACHED_PID_FILE=${GANGLIA_RUNTIME_DIR}/rrdcached.pid; +RRDCACHED_ALL_ACCESS_UNIX_SOCKET=${GANGLIA_RUNTIME_DIR}/rrdcached.sock; +RRDCACHED_LIMITED_ACCESS_UNIX_SOCKET=${GANGLIA_RUNTIME_DIR}/rrdcached.limited.sock; + +function getRrdcachedLoggedPid() +{ + if [ -e "${RRDCACHED_PID_FILE}" ] + then + echo `cat ${RRDCACHED_PID_FILE}`; + fi +} + +function getRrdcachedRunningPid() +{ + rrdcachedLoggedPid=`getRrdcachedLoggedPid`; + + if [ -n "${rrdcachedLoggedPid}" ] + then + echo `ps -o pid=MYPID -p ${rrdcachedLoggedPid} | tail -1 | awk '{print $1}' | grep -v MYPID`; + fi +} http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/setupGanglia.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/setupGanglia.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/setupGanglia.sh new file mode 100644 index 0000000..e700eaa --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/setupGanglia.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get access to Ganglia-wide constants, utilities etc. +source ./gangliaLib.sh + +function usage() +{ + cat << END_USAGE +Usage: ${0} [-c <gmondClusterName> [-m]] [-t] [-o <owner>] [-g <group>] + +Options: + -c <gmondClusterName> The name of the Ganglia Cluster whose gmond configuration we're here to generate. + + -m Whether this gmond (if -t is not specified) is the master for its Ganglia + Cluster. Without this, we generate slave gmond configuration. + + -t Whether this is a call to generate gmetad configuration (as opposed to the + gmond configuration that is generated without this). + -o <owner> Owner + -g <group> Group +END_USAGE +} + +function instantiateGmetadConf() +{ + # gmetad utility library. + source ./gmetadLib.sh; + + generateGmetadConf > ${GMETAD_CONF_FILE}; +} + +function instantiateGmondConf() +{ + # gmond utility library. + source ./gmondLib.sh; + + gmondClusterName=${1}; + + if [ "x" != "x${gmondClusterName}" ] + then + + createDirectory "${GANGLIA_RUNTIME_DIR}/${gmondClusterName}"; + createDirectory "${GANGLIA_CONF_DIR}/${gmondClusterName}/conf.d"; + + # Always blindly generate the core gmond config - that goes on every box running gmond. + generateGmondCoreConf ${gmondClusterName} > `getGmondCoreConfFileName ${gmondClusterName}`; + + isMasterGmond=${2}; + + # Decide whether we want to add on the master or slave gmond config. + if [ "0" -eq "${isMasterGmond}" ] + then + generateGmondSlaveConf ${gmondClusterName} > `getGmondSlaveConfFileName ${gmondClusterName}`; + else + generateGmondMasterConf ${gmondClusterName} > `getGmondMasterConfFileName ${gmondClusterName}`; + fi + + chown -R ${3}:${4} ${GANGLIA_CONF_DIR}/${gmondClusterName} + + else + echo "No gmondClusterName passed in, nothing to instantiate"; + fi +} + +# main() + +gmondClusterName=; +isMasterGmond=0; +configureGmetad=0; +owner='root'; +group='root'; + +while getopts ":c:mto:g:" OPTION +do + case ${OPTION} in + c) + gmondClusterName=${OPTARG}; + ;; + m) + isMasterGmond=1; + ;; + t) + configureGmetad=1; + ;; + o) + owner=${OPTARG}; + ;; + g) + group=${OPTARG}; + ;; + ?) + usage; + exit 1; + esac +done + +# Initialization. +createDirectory ${GANGLIA_CONF_DIR}; +createDirectory ${GANGLIA_RUNTIME_DIR}; +# So rrdcached can drop its PID files in here. +chmod a+w ${GANGLIA_RUNTIME_DIR}; +chown ${owner}:${group} ${GANGLIA_CONF_DIR}; + +if [ -n "${gmondClusterName}" ] +then + + # Be forgiving of users who pass in -c along with -t (which always takes precedence). + if [ "1" -eq "${configureGmetad}" ] + then + instantiateGmetadConf; + else + instantiateGmondConf ${gmondClusterName} ${isMasterGmond} ${owner} ${group}; + fi + +elif [ "1" -eq "${configureGmetad}" ] +then + instantiateGmetadConf; +else + usage; + exit 2; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmetad.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmetad.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmetad.sh new file mode 100644 index 0000000..b271e06 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmetad.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +source ./gmetadLib.sh; + +# To get access to ${RRDCACHED_ALL_ACCESS_UNIX_SOCKET}. +source ./rrdcachedLib.sh; + +# Before starting gmetad, start rrdcached. +./startRrdcached.sh; + +if [ $? -eq 0 ] +then + gmetadRunningPid=`getGmetadRunningPid`; + + # Only attempt to start gmetad if there's not already one running. + if [ -f "${GMETAD_PID_FILE}" ] && [ -z "${gmetadRunningPid}" ] + then + rm -f ${GMETAD_PID_FILE}; rm -f /var/lock/subsys/hdp-gmetad + fi + if [ -z "${gmetadRunningPid}" ] + then + env RRDCACHED_ADDRESS=${RRDCACHED_ALL_ACCESS_UNIX_SOCKET} \ + ${GMETAD_BIN} --conf=${GMETAD_CONF_FILE} --pid-file=${GMETAD_PID_FILE}; + + for i in `seq 0 5`; do + gmetadRunningPid=`getGmetadRunningPid`; + if [ -n "${gmetadRunningPid}" ] + then + break; + fi + sleep 1; + done + + if [ -n "${gmetadRunningPid}" ] + then + echo "Started ${GMETAD_BIN} with PID ${gmetadRunningPid}"; + else + echo "Failed to start ${GMETAD_BIN}"; + exit 1; + fi + else + echo "${GMETAD_BIN} already running with PID ${gmetadRunningPid}"; + fi +else + echo "Not starting ${GMETAD_BIN} because starting ${RRDCACHED_BIN} failed."; + exit 2; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmond.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmond.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmond.sh new file mode 100644 index 0000000..cdf4fe0 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startGmond.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +# Pulls in gangliaLib.sh as well, so we can skip pulling it in again. +source ./gmondLib.sh; + +function startGmondForCluster() +{ + gmondClusterName=${1}; + + gmondRunningPid=`getGmondRunningPid ${gmondClusterName}`; + gmondPidFileName=`getGmondPidFileName ${gmondClusterName}`; + + # Only attempt to start gmond if there's not already one running. + if [ -f "${gmondPidFileName}" ] && [ -z "${gmondRunningPid}" ] + then + rm -f ${gmondPidFileName} + fi + if [ -z "${gmondRunningPid}" ] + then + gmondCoreConfFileName=`getGmondCoreConfFileName ${gmondClusterName}`; + + if [ -e "${gmondCoreConfFileName}" ] + then + gmondPidFileName=`getGmondPidFileName ${gmondClusterName}`; + + ${GMOND_BIN} --conf=${gmondCoreConfFileName} --pid-file=${gmondPidFileName}; + + for i in `seq 0 5`; do + gmondRunningPid=`getGmondRunningPid ${gmondClusterName}`; + if [ -n "${gmondRunningPid}" ] + then + break; + fi + sleep 1; + done + + if [ -n "${gmondRunningPid}" ] + then + echo "Started ${GMOND_BIN} for cluster ${gmondClusterName} with PID ${gmondRunningPid}"; + else + echo "Failed to start ${GMOND_BIN} for cluster ${gmondClusterName}"; + exit 1; + fi + fi + else + echo "${GMOND_BIN} for cluster ${gmondClusterName} already running with PID ${gmondRunningPid}"; + fi +} + +# main() +gmondClusterName=${1}; + +if [ "x" == "x${gmondClusterName}" ] +then + # No ${gmondClusterName} passed in as command-line arg, so start + # all the gmonds we know about. + for gmondClusterName in `getConfiguredGangliaClusterNames` + do + startGmondForCluster ${gmondClusterName}; + done +else + # Just start the one ${gmondClusterName} that was asked for. + startGmondForCluster ${gmondClusterName}; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startRrdcached.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startRrdcached.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startRrdcached.sh new file mode 100644 index 0000000..dc47f39 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/startRrdcached.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Slurp in all our user-customizable settings. +source ./gangliaEnv.sh; + +# Get all our common constants etc. set up. +source ./rrdcachedLib.sh; + +rrdcachedRunningPid=`getRrdcachedRunningPid`; + +# Only attempt to start rrdcached if there's not already one running. +if [ -z "${rrdcachedRunningPid}" ] +then + su -s /bin/bash - ${GMETAD_USER} -c "${RRDCACHED_BIN} -p ${RRDCACHED_PID_FILE} \ + -m 664 -l unix:${RRDCACHED_ALL_ACCESS_UNIX_SOCKET} \ + -m 777 -P FLUSH,STATS,HELP -l unix:${RRDCACHED_LIMITED_ACCESS_UNIX_SOCKET} \ + -b ${RRDCACHED_BASE_DIR} -B -t ${RRDCACHED_WRITE_THREADS} \ + -w ${RRDCACHED_TIMEOUT} -f ${RRDCACHED_FLUSH_TIMEOUT} -z ${RRDCACHED_DELAY} -F" + + # Ideally, we'd use ${RRDCACHED_BIN}'s -s ${WEBSERVER_GROUP} option for + # this, but it doesn't take sometimes due to a lack of permissions, + # so perform the operation explicitly to be super-sure. + chgrp ${WEBSERVER_GROUP} ${RRDCACHED_ALL_ACCESS_UNIX_SOCKET}; + chgrp ${WEBSERVER_GROUP} ${RRDCACHED_LIMITED_ACCESS_UNIX_SOCKET}; + + # Check to make sure rrdcached actually started up. + for i in `seq 0 5`; do + rrdcachedRunningPid=`getRrdcachedRunningPid`; + if [ -n "${rrdcachedRunningPid}" ] + then + break; + fi + sleep 1; + done + + if [ -n "${rrdcachedRunningPid}" ] + then + echo "Started ${RRDCACHED_BIN} with PID ${rrdcachedRunningPid}"; + else + echo "Failed to start ${RRDCACHED_BIN}"; + exit 1; + fi + + #Configure Ganglia Web to work with RRDCached + GANGLIA_WEB_CONFIG_FILE=${GANGLIA_WEB_PATH}/conf_default.php + + if [ -f $GANGLIA_WEB_CONFIG_FILE ] + then + sed -i "s@\$conf\['rrdcached_socket'] =.*@\$conf\['rrdcached_socket'] = \"unix:${RRDCACHED_LIMITED_ACCESS_UNIX_SOCKET}\";@" $GANGLIA_WEB_CONFIG_FILE + sed -i "s@\$conf\['rrds'] =.*@\$conf\['rrds'] = \"${RRDCACHED_BASE_DIR}\";@" $GANGLIA_WEB_CONFIG_FILE + sed -i "s@\$conf\['gmetad_root'] =.*@\$conf\['gmetad_root'] = \"${RRDCACHED_BASE_DIR}\";@" $GANGLIA_WEB_CONFIG_FILE + else + echo "${GANGLIA_WEB_CONFIG_FILE} can't be found"; + exit 1; + fi + +else + echo "${RRDCACHED_BIN} already running with PID ${rrdcachedRunningPid}"; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmetad.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmetad.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmetad.sh new file mode 100644 index 0000000..86731d2 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmetad.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +source ./gmetadLib.sh; + +gmetadRunningPid=`getGmetadRunningPid`; + +# Only go ahead with the termination if we could find a running PID. +if [ -n "${gmetadRunningPid}" ] +then + kill -KILL ${gmetadRunningPid}; + echo "Stopped ${GMETAD_BIN} (with PID ${gmetadRunningPid})"; +fi + +# Poll again. +gmetadRunningPid=`getGmetadRunningPid`; + +# Once we've killed gmetad, there should no longer be a running PID. +if [ -z "${gmetadRunningPid}" ] +then + # It's safe to stop rrdcached now. + ./stopRrdcached.sh; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmond.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmond.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmond.sh new file mode 100644 index 0000000..8824d2a --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopGmond.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +# Pulls in gangliaLib.sh as well, so we can skip pulling it in again. +source ./gmondLib.sh; + +function stopGmondForCluster() +{ + gmondClusterName=${1}; + + gmondRunningPid=`getGmondRunningPid ${gmondClusterName}`; + + # Only go ahead with the termination if we could find a running PID. + if [ -n "${gmondRunningPid}" ] + then + kill -KILL ${gmondRunningPid}; + echo "Stopped ${GMOND_BIN} for cluster ${gmondClusterName} (with PID ${gmondRunningPid})"; + fi +} + +# main() +gmondClusterName=${1}; + +if [ "x" == "x${gmondClusterName}" ] +then + # No ${gmondClusterName} passed in as command-line arg, so stop + # all the gmonds we know about. + for gmondClusterName in `getConfiguredGangliaClusterNames` + do + stopGmondForCluster ${gmondClusterName}; + done +else + stopGmondForCluster ${gmondClusterName}; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopRrdcached.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopRrdcached.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopRrdcached.sh new file mode 100644 index 0000000..bffc9e5 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/stopRrdcached.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get all our common constants etc. set up. +source ./rrdcachedLib.sh; + +rrdcachedRunningPid=`getRrdcachedRunningPid`; + +# Only go ahead with the termination if we could find a running PID. +if [ -n "${rrdcachedRunningPid}" ] +then + kill -TERM ${rrdcachedRunningPid}; + # ${RRDCACHED_BIN} takes a few seconds to drain its buffers, so wait + # until we're sure it's well and truly dead. + # + # Without this, an immediately following startRrdcached.sh won't do + # anything, because it still sees this soon-to-die instance alive, + # and the net result is that after a few seconds, there's no + # ${RRDCACHED_BIN} running on the box anymore. + sleep 5; + echo "Stopped ${RRDCACHED_BIN} (with PID ${rrdcachedRunningPid})"; +fi http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/teardownGanglia.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/teardownGanglia.sh b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/teardownGanglia.sh new file mode 100644 index 0000000..8740c27 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/files/teardownGanglia.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +#/* +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you 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. +# */ + +cd `dirname ${0}`; + +# Get access to Ganglia-wide constants, utilities etc. +source ./gangliaLib.sh; + +# Undo what we did while setting up Ganglia on this box. +rm -rf ${GANGLIA_CONF_DIR}; +rm -rf ${GANGLIA_RUNTIME_DIR}; http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/functions.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/functions.py b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/functions.py new file mode 100644 index 0000000..b02e688 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/functions.py @@ -0,0 +1,31 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# +from resource_management import * + + +def turn_off_autostart(service): + if System.get_instance().os_family == "ubuntu": + Execute(format("update-rc.d {service} disable"), + path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin' + ) + Execute(format("service {service} stop"), ignore_failures=True) + Execute(format("echo 'manual' > /etc/init/{service}.override")) # disbale upstart job + else: + Execute(format("chkconfig {service} off"), + path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin' + ) http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia.py b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia.py new file mode 100644 index 0000000..69fde27 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia.py @@ -0,0 +1,97 @@ +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +""" + +from resource_management import * +import os + + +def groups_and_users(): + import params + +def config(): + import params + + shell_cmds_dir = params.ganglia_shell_cmds_dir + shell_files = ['checkGmond.sh', 'checkRrdcached.sh', 'gmetadLib.sh', + 'gmondLib.sh', 'rrdcachedLib.sh', + 'setupGanglia.sh', 'startGmetad.sh', 'startGmond.sh', + 'startRrdcached.sh', 'stopGmetad.sh', + 'stopGmond.sh', 'stopRrdcached.sh', 'teardownGanglia.sh'] + Directory(shell_cmds_dir, + owner="root", + group="root", + recursive=True + ) + init_file("gmetad") + init_file("gmond") + for sh_file in shell_files: + shell_file(sh_file) + for conf_file in ['gangliaClusters.conf', 'gangliaEnv.sh', 'gangliaLib.sh']: + ganglia_TemplateConfig(conf_file) + + +def init_file(name): + import params + + File("/etc/init.d/hdp-" + name, + content=StaticFile(name + ".init"), + mode=0755 + ) + + +def shell_file(name): + import params + + File(params.ganglia_shell_cmds_dir + os.sep + name, + content=StaticFile(name), + mode=0755 + ) + + +def ganglia_TemplateConfig(name, mode=0755, tag=None): + import params + + TemplateConfig(format("{params.ganglia_shell_cmds_dir}/{name}"), + owner="root", + group="root", + template_tag=tag, + mode=mode + ) + + +def generate_daemon(ganglia_service, + name=None, + role=None, + owner=None, + group=None): + import params + + cmd = "" + if ganglia_service == "gmond": + if role == "server": + cmd = "{params.ganglia_shell_cmds_dir}/setupGanglia.sh -c {name} -m -o {owner} -g {group}" + else: + cmd = "{params.ganglia_shell_cmds_dir}/setupGanglia.sh -c {name} -o {owner} -g {group}" + elif ganglia_service == "gmetad": + cmd = "{params.ganglia_shell_cmds_dir}/setupGanglia.sh -t -o {owner} -g {group}" + else: + raise Fail("Unexpected ganglia service") + Execute(format(cmd), + path=[params.ganglia_shell_cmds_dir, "/usr/sbin", + "/sbin:/usr/local/bin", "/bin", "/usr/bin"] + ) http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor.py b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor.py new file mode 100644 index 0000000..ede1a0b --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor.py @@ -0,0 +1,236 @@ +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +""" + +import sys +import os +from os import path +from resource_management import * +from ganglia import generate_daemon +import ganglia +import functions +import ganglia_monitor_service + + +class GangliaMonitor(Script): + def install(self, env): + import params + + self.install_packages(env) + env.set_params(params) + self.configure(env) + + functions.turn_off_autostart(params.gmond_service_name) + functions.turn_off_autostart("gmetad") # since the package is installed as well + + def start(self, env): + import params + env.set_params(params) + self.configure(env) + ganglia_monitor_service.monitor("start") + + def stop(self, env): + ganglia_monitor_service.monitor("stop") + + + def status(self, env): + import status_params + pid_file_name = 'gmond.pid' + pid_file_count = 0 + pid_dir = status_params.pid_dir + # Recursively check all existing gmond pid files + for cur_dir, subdirs, files in os.walk(pid_dir): + for file_name in files: + if file_name == pid_file_name: + pid_file = os.path.join(cur_dir, file_name) + check_process_status(pid_file) + pid_file_count += 1 + if pid_file_count == 0: # If no any pid file is present + raise ComponentIsNotRunning() + + + def configure(self, env): + import params + + ganglia.groups_and_users() + + Directory(params.ganglia_conf_dir, + owner="root", + group=params.user_group, + recursive=True + ) + + ganglia.config() + + self.generate_slave_configs() + + Directory(path.join(params.ganglia_dir, "conf.d"), + owner="root", + group=params.user_group + ) + + File(path.join(params.ganglia_dir, "conf.d/modgstatus.conf"), + owner="root", + group=params.user_group + ) + File(path.join(params.ganglia_dir, "conf.d/multicpu.conf"), + owner="root", + group=params.user_group + ) + File(path.join(params.ganglia_dir, "gmond.conf"), + owner="root", + group=params.user_group + ) + + if params.is_ganglia_server_host: + self.generate_master_configs() + + if len(params.gmond_apps) != 0: + self.generate_app_configs() + pass + pass + + + def generate_app_configs(self): + import params + + for gmond_app in params.gmond_apps: + generate_daemon("gmond", + name=gmond_app[0], + role="server", + owner="root", + group=params.user_group) + generate_daemon("gmond", + name = gmond_app[0], + role = "monitor", + owner = "root", + group = params.user_group) + pass + + def generate_slave_configs(self): + import params + + generate_daemon("gmond", + name = "HDPSlaves", + role = "monitor", + owner = "root", + group = params.user_group) + + + def generate_master_configs(self): + import params + + if params.has_namenodes: + generate_daemon("gmond", + name = "HDPNameNode", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_jobtracker: + generate_daemon("gmond", + name = "HDPJobTracker", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_hbase_masters: + generate_daemon("gmond", + name = "HDPHBaseMaster", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_resourcemanager: + generate_daemon("gmond", + name = "HDPResourceManager", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_nodemanager: + generate_daemon("gmond", + name = "HDPNodeManager", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_historyserver: + generate_daemon("gmond", + name = "HDPHistoryServer", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_slaves: + generate_daemon("gmond", + name = "HDPDataNode", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_tasktracker: + generate_daemon("gmond", + name = "HDPTaskTracker", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_hbase_rs: + generate_daemon("gmond", + name = "HDPHBaseRegionServer", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_nimbus_server: + generate_daemon("gmond", + name = "HDPNimbus", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_supervisor_server: + generate_daemon("gmond", + name = "HDPSupervisor", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_flume: + generate_daemon("gmond", + name = "HDPFlumeServer", + role = "server", + owner = "root", + group = params.user_group) + + if params.has_journalnode: + generate_daemon("gmond", + name = "HDPJournalNode", + role = "server", + owner = "root", + group = params.user_group) + + generate_daemon("gmond", + name = "HDPSlaves", + role = "server", + owner = "root", + group = params.user_group) + + +if __name__ == "__main__": + GangliaMonitor().execute() http://git-wip-us.apache.org/repos/asf/ambari/blob/e7d07030/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor_service.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor_service.py b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor_service.py new file mode 100644 index 0000000..cf7a4b1 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/PHD/3.0.0.0/services/GANGLIA/package/scripts/ganglia_monitor_service.py @@ -0,0 +1,27 @@ +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +""" + +from resource_management import * + + +def monitor(action=None):# 'start' or 'stop' + Execute( + format( + "service hdp-gmond {action} >> /tmp/gmond.log 2>&1 ; /bin/ps auwx | /bin/grep [g]mond >> /tmp/gmond.log 2>&1"), + path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin' + )