RadarURL
Skip to content
조회 수 73 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

apache.chart.sh 소스를 /etc/netdata/charts.d/ 경로에 넣는다.

 

apache.chart.sh source

------------------------------------

# no need for shebang - this file is loaded from charts.d.plugin

# netdata
# real-time performance and health monitoring, done right!
# (C) 2016 Costa Tsaousis <costa@tsaousis.gr>
# GPL v3+
#

# the URL to download apache status info
apache_url="http://127.0.0.1:80/server-status?auto"
apache_curl_opts=

# _update_every is a special variable - it holds the number of seconds
# between the calls of the _update() function
apache_update_every=

apache_priority=60000

# convert apache floating point values
# to integer using this multiplier
# this only affects precision - the values
# will be in the proper units
apache_decimal_detail=1000000

declare -a apache_response=()
apache_accesses=0
apache_kbytes=0
apache_reqpersec=0
apache_bytespersec=0
apache_bytesperreq=0
apache_busyworkers=0
apache_idleworkers=0
apache_connstotal=0
apache_connsasyncwriting=0
apache_connsasynckeepalive=0
apache_connsasyncclosing=0

apache_keys_detected=0
apache_has_conns=0
apache_key_accesses=
apache_key_kbytes=
apache_key_reqpersec=
apache_key_bytespersec=
apache_key_bytesperreq=
apache_key_busyworkers=
apache_key_idleworkers=
apache_key_scoreboard=
apache_key_connstotal=
apache_key_connsasyncwriting=
apache_key_connsasynckeepalive=
apache_key_connsasyncclosing=
apache_detect() {
	local i=0
	for x in "${@}"
	do
		case "${x}" in
			'Total Accesses') 		apache_key_accesses=$((i + 1)) ;;
			'Total kBytes') 		apache_key_kbytes=$((i + 1)) ;;
			'ReqPerSec') 			apache_key_reqpersec=$((i + 1)) ;;
			'BytesPerSec')			apache_key_bytespersec=$((i + 1)) ;;
			'BytesPerReq')			apache_key_bytesperreq=$((i + 1)) ;;
			'BusyWorkers')			apache_key_busyworkers=$((i + 1)) ;;
			'IdleWorkers')			apache_key_idleworkers=$((i + 1));;
			'ConnsTotal')			apache_key_connstotal=$((i + 1)) ;;
			'ConnsAsyncWriting')	apache_key_connsasyncwriting=$((i + 1)) ;;
			'ConnsAsyncKeepAlive')	apache_key_connsasynckeepalive=$((i + 1)) ;;
			'ConnsAsyncClosing')	apache_key_connsasyncclosing=$((i + 1)) ;;
			'Scoreboard')			apache_key_scoreboard=$((i)) ;;
		esac

		i=$((i + 1))
	done

	# we will not check of the Conns*
	# keys, since these are apache 2.4 specific
	[ -z "${apache_key_accesses}"    ] && error "missing 'Total Accesses' from apache server: ${*}" && return 1
	[ -z "${apache_key_kbytes}"      ] && error "missing 'Total kBytes' from apache server: ${*}" && return 1
	[ -z "${apache_key_reqpersec}"   ] && error "missing 'ReqPerSec' from apache server: ${*}" && return 1
	[ -z "${apache_key_bytespersec}" ] && error "missing 'BytesPerSec' from apache server: ${*}" && return 1
	[ -z "${apache_key_bytesperreq}" ] && error "missing 'BytesPerReq' from apache server: ${*}" && return 1
	[ -z "${apache_key_busyworkers}" ] && error "missing 'BusyWorkers' from apache server: ${*}" && return 1
	[ -z "${apache_key_idleworkers}" ] && error "missing 'IdleWorkers' from apache server: ${*}" && return 1
	[ -z "${apache_key_scoreboard}"  ] && error "missing 'Scoreboard' from apache server: ${*}" && return 1

	if [ ! -z "${apache_key_connstotal}" \
		-a ! -z "${apache_key_connsasyncwriting}" \
		-a ! -z "${apache_key_connsasynckeepalive}" \
		-a ! -z "${apache_key_connsasyncclosing}" \
		]
		then
		apache_has_conns=1
	else
		apache_has_conns=0
	fi

	return 0
}

apache_get() {
	local oIFS="${IFS}" ret
	IFS=$':\n' apache_response=($(run curl -Ss ${apache_curl_opts} "${apache_url}"))
	ret=$?
	IFS="${oIFS}"

	[ $ret -ne 0 -o "${#apache_response[@]}" -eq 0 ] && return 1

	# the last line on the apache output is "Scoreboard"
	# we use this label to detect that the output has a new word count
	if [ ${apache_keys_detected} -eq 0 -o "${apache_response[${apache_key_scoreboard}]}" != "Scoreboard" ]
		then
		apache_detect "${apache_response[@]}" || return 1
		apache_keys_detected=1
	fi

	apache_accesses="${apache_response[${apache_key_accesses}]}"
	apache_kbytes="${apache_response[${apache_key_kbytes}]}"
	
	float2int "${apache_response[${apache_key_reqpersec}]}" ${apache_decimal_detail}
	apache_reqpersec=${FLOAT2INT_RESULT}

	float2int "${apache_response[${apache_key_bytespersec}]}" ${apache_decimal_detail}
	apache_bytespersec=${FLOAT2INT_RESULT}

	float2int "${apache_response[${apache_key_bytesperreq}]}" ${apache_decimal_detail}
	apache_bytesperreq=${FLOAT2INT_RESULT}

	apache_busyworkers="${apache_response[${apache_key_busyworkers}]}"
	apache_idleworkers="${apache_response[${apache_key_idleworkers}]}"

	if [ -z "${apache_accesses}" \
		-o -z "${apache_kbytes}" \
		-o -z "${apache_reqpersec}" \
		-o -z "${apache_bytespersec}" \
		-o -z "${apache_bytesperreq}" \
		-o -z "${apache_busyworkers}" \
		-o -z "${apache_idleworkers}" \
		]
		then
		error "empty values got from apache server: ${apache_response[*]}"
		return 1
	fi

	if [ ${apache_has_conns} -eq 1 ]
		then
		apache_connstotal="${apache_response[${apache_key_connstotal}]}"
		apache_connsasyncwriting="${apache_response[${apache_key_connsasyncwriting}]}"
		apache_connsasynckeepalive="${apache_response[${apache_key_connsasynckeepalive}]}"
		apache_connsasyncclosing="${apache_response[${apache_key_connsasyncclosing}]}"
	fi

	return 0
}

# _check is called once, to find out if this chart should be enabled or not
apache_check() {

	apache_get
	if [ $? -ne 0 ]
		then
		error "cannot find stub_status on URL '${apache_url}'. Please set apache_url='http://apache.server:80/server-status?auto' in $confd/apache.conf"
		return 1
	fi

	# this should return:
	#  - 0 to enable the chart
	#  - 1 to disable the chart

	return 0
}

# _create is called once, to create the charts
apache_create() {
	cat <<EOF
CHART apache_local.bytesperreq '' "apache Lifetime Avg. Response Size" "bytes/request" statistics apache.bytesperreq area $((apache_priority + 8)) $apache_update_every
DIMENSION size '' absolute 1 ${apache_decimal_detail}
CHART apache_local.workers '' "apache Workers" "workers" workers apache.workers stacked $((apache_priority + 5)) $apache_update_every
DIMENSION idle '' absolute 1 1
DIMENSION busy '' absolute 1 1
CHART apache_local.reqpersec '' "apache Lifetime Avg. Requests/s" "requests/s" statistics apache.reqpersec line $((apache_priority + 6)) $apache_update_every
DIMENSION requests '' absolute 1 ${apache_decimal_detail}
CHART apache_local.bytespersec '' "apache Lifetime Avg. Bandwidth/s" "kilobits/s" statistics apache.bytespersec area $((apache_priority + 7)) $apache_update_every
DIMENSION sent '' absolute 8 $((apache_decimal_detail * 1000))
CHART apache_local.requests '' "apache Requests" "requests/s" requests apache.requests line $((apache_priority + 1)) $apache_update_every
DIMENSION requests '' incremental 1 1
CHART apache_local.net '' "apache Bandwidth" "kilobits/s" bandwidth apache.net area $((apache_priority + 3)) $apache_update_every
DIMENSION sent '' incremental 8 1
EOF

	if [ ${apache_has_conns} -eq 1 ]
		then
		cat <<EOF2
CHART apache_local.connections '' "apache Connections" "connections" connections apache.connections line $((apache_priority + 2)) $apache_update_every
DIMENSION connections '' absolute 1 1
CHART apache_local.conns_async '' "apache Async Connections" "connections" connections apache.conns_async stacked $((apache_priority + 4)) $apache_update_every
DIMENSION keepalive '' absolute 1 1
DIMENSION closing '' absolute 1 1
DIMENSION writing '' absolute 1 1
EOF2
	fi

	return 0
}

# _update is called continiously, to collect the values
apache_update() {
	local reqs net
	# the first argument to this function is the microseconds since last update
	# pass this parameter to the BEGIN statement (see bellow).

	# do all the work to collect / calculate the values
	# for each dimension
	# remember: KEEP IT SIMPLE AND SHORT

	apache_get || return 1

	# write the result of the work.
	cat <<VALUESEOF
BEGIN apache_local.requests $1
SET requests = $((apache_accesses))
END
BEGIN apache_local.net $1
SET sent = $((apache_kbytes))
END
BEGIN apache_local.reqpersec $1
SET requests = $((apache_reqpersec))
END
BEGIN apache_local.bytespersec $1
SET sent = $((apache_bytespersec))
END
BEGIN apache_local.bytesperreq $1
SET size = $((apache_bytesperreq))
END
BEGIN apache_local.workers $1
SET idle = $((apache_idleworkers))
SET busy = $((apache_busyworkers))
END
VALUESEOF

	if [ ${apache_has_conns} -eq 1 ]
		then
	cat <<VALUESEOF2
BEGIN apache_local.connections $1
SET connections = $((apache_connstotal))
END
BEGIN apache_local.conns_async $1
SET keepalive = $((apache_connsasynckeepalive))
SET closing = $((apache_connsasyncclosing))
SET writing = $((apache_connsasyncwriting))
END
VALUESEOF2
	fi

	return 0
}

------------------------------------

 

/etc/netdata/charts.d/apache.conf

를 아래와 같이 설정 파일을 만든다.

 

------------------------------------

# the URL your apache server is responding with mod_status information.
apache_url="http://127.0.0.1:80/server-status?auto"

# use this to set custom curl options you may need
apache_curl_opts=

# set this to a NUMBER to overwrite the update frequency
# it is in seconds
apache_update_every=

------------------------------------

 

아래 내용을 apache 설정 파일(/etc/httpd/conf/httpd.conf)에 추가한다.

/etc/httpd/conf/httpd.conf

 

------------------------------------

<Location /server-status>
 SetHandler server-status

 Order Deny,Allow
 Deny from all
 Allow from localhost
# Allow from all
</Location>

------------------------------------

 

netdata 설치 폴더에서

./netdata-installer.sh
를 실행해준다.

 

끝~

 

참고 : https://github.com/firehol/netdata/wiki/apache.chart.sh

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
78 apache 2.4.6 worker 방식 튜닝 JAESOO 2016.11.05 220
77 Apache event MPM, Prefork MPM, Worker MPM 방식의 차이점 및 설치 시 설정 방법 JAESOO 2016.11.05 168
» netdata에 Apache perfomance data 추가 방법 JAESOO 2016.10.25 73
75 htm이나 html 확장자를 php로 인식시키는 apache(아파치) 셋팅 JAESOO 2016.10.25 89
74 httpd.conf의 DirectoryIndex 설정이 적용되지 않습니다. JAESOO 2016.10.25 66
73 Linux - Apache 설치후 페이지 접근시, 권한 에러 JAESOO 2016.10.24 75
72 apache 에서 mod_rewrite 활성화 안될때 (xe 등에서 도메인 하위 경로명 오류 날때) JAESOO 2016.10.24 87
71 아파치 httpd.conf 재시작 없이 설정 적용하기 JAESOO 2016.05.01 149
70 톰캣 8 소개 JAESOO 2015.12.31 240
69 리눅스 아파치 로그 뷰어 webalizer, utf-8로 변환하기 JAESOO 2014.12.22 394
68 Webalizer Configuration – Configure Webalizer for SEO JAESOO 2014.12.22 743
67 Webalizer, AWStats에서 국가 정보 확인하기 JAESOO 2014.12.22 307
66 Webalizer에서 국가별 로그 출력하기 JAESOO 2014.12.22 600
65 Apache: A good Webalizer.conf for the Webalizer Apache Log Analyzer utility JAESOO 2014.12.22 1192
64 아파치 로그분석 webalizer 설치 JAESOO 2014.12.20 293
63 Permission denied: .htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable JAESOO 2014.12.19 492
62 Permission denied: /home/.htaccess pcfg_openfile: unable to check htaccess file JAESOO 2014.12.19 624
61 pcfg_openfile: unable to check htaccess file, ensure it is readable JAESOO 2014.12.19 440
60 Tomcat 버전별 설명 JAESOO 2014.06.03 3005
59 Apache 실행환경을 nobody 사용자로 변경 JAESOO 2014.05.27 1461
Board Pagination Prev 1 2 3 4 Next
/ 4

PageViews   Today : 1,770   Yesterday : 2,270   Total : 19,449,744  /  Counter Status   Today : 568   Yesterday : 613   Total : 1,314,050
Site Info   Member : 69  /  Total documents : 1,221   New documents : 0  /  Total comments : 21

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소