OpenStack 모니터링 스크립트
OpenStack/RHOSP 운영 관점에서 OpenStack 모니터링 스크립트의 목적, 적용 범위, 실행 전 확인할 항목을 정리한 기술 노트입니다.
핵심 요약
- OpenStack/RHOSP 운영 기준으로 글의 목적과 적용 범위를 먼저 확인할 수 있게 정리했습니다.
- 원문의 명령어, 로그, 절차는 보존하고 운영자가 먼저 봐야 할 맥락을 앞쪽에 배치했습니다.
- 실행형 명령은 대상 환경, 권한, 백업 또는 롤백 경로를 확인한 뒤 적용하는 것을 전제로 합니다.
적용 범위
이 글은 OpenStack/RHOSP 운영 업무에서 OpenStack 모니터링 스크립트를 빠르게 검토하기 위한 운영 노트입니다. 실습이나 변경 작업은 각자의 랩/운영 환경 기준으로 값과 절차를 재확인한 뒤 진행합니다.
정리된 본문
#오픈스택 모니터링 스크립트 1.1
#!/bin/bash
# 컴퓨트 노드 컨테이너와 로그 확인, 오픈스텍 서비스 확인, 호스트 내의 VM 상태 확인 스크립트 입니다.
# 사용 방법 : overcloud 권한 상태에서 수행 추천 -> vi temp_mon.sh 로 파일 생성 후 해당 스크립트 전체 복사 및 저장 -> 스크립트 파일 권한 부여 -> 스크립트 실행 및 결과 팡ㄹ 출력
# 실행 >> su - stack >> source ~/overcloudrc ; vi ./temp_mon.sh ; chmod 755 ./temp_mon.sh ; ./temp_mon.sh > temp_mon.sh.log 2>&1
# 필요에 따라 주석처리한 부분은 해제 후 사용하세요
# 컨트롤러 노드 내의 컨테이너 정상일 경우 갯수
CON_CNT=0
# 컴퓨트 노드 내의 컨테이너 정상일 경우 갯수
COM_CNT=16
# 컨트롤러 노드 IP
CON_HOSTS="172.23.167.103"
# 컴퓨트 노드 IP
COM_HOSTS="172.23.167.150"
# 컨트롤러 노드 점검
#for host in $CON_HOSTS
#do
# echo "========== $host ============"
# echo ">>>>>> Check container's status <<<<<<"
# cnt=$(ssh root$host "sudo docker ps | grep -v IMAGE | wc -l")
# cnt=$(ssh root$host "sudo podman ps | grep -v IMAGE | wc -l")
# if [[ $cnt -eq $CON_CNT ]]; then
# echo "The $host containers count is $cnt. This is normal."
# else
# echo "Please check container's status"
# ssh root@$host "sudo docker ps"
# ssh root@$host "sudo podman ps"
# fi
# echo ">>>>>> Check service logs <<<<<<"
# ssh root@$host "echo 'tail /var/log/containers/*/*.log | grep -i error | wc -l' > mon-logs.sh"
# err_cnt=$(ssh root@$host "sudo sh mon-logs.sh")
# if [[ $err_cnt -eq 0 ]]; then
# echo "The $host has no error logs. This system is normal."
# else
# echo "Please check service logs"
# ssh root@$host "echo 'tail /var/log/containers/*/*.log | grep -i error' > mon-logs.sh"
# ssh root@$host "sudo sh mon-logs.sh"
# fi
#done
# 컴퓨트 노드 점검
for host in $COM_HOSTS
do
echo "========== $host ============"
echo ">>>>>> Check container's status <<<<<<"
# cnt=$(ssh heat-admin@$host "sudo docker ps | grep -v IMAGE | wc -l")
cnt=$(ssh heat-admin@$host "sudo podman ps | grep -v IMAGE | wc -l")
if [[ $cnt -eq $COM_CNT ]]; then
echo "The $host containers count is $cnt. This is normal."
else
echo "Please check container's status"
# ssh heat-admin@$host "sudo docker ps"
ssh heat-admin@$host "sudo podman ps"
fi
echo ">>>>>> Check Compute node Status <<<<<<"
echo "===========$host uptime==========="
ssh heat-admin@$host "sudo uptime"
echo "===========$host disk status==========="
ssh heat-admin@$host "sudo df -h"
echo "===========$host network status==========="
echo "=====all stat======"
ssh heat-admin@$host "sudo ip a |grep DOWN ; arp -n |grep incomplete ; ip ro"
echo "=====ping test======"
ssh heat-admin@$host "sudo ping $(sudo route |grep default |awk '{print $2}') -c 3 |tail -3"
ssh heat-admin@$host "sudo ping 8.8.8.8 -c 3 |tail -3"
echo "===========$host iscsiadm status==========="
ssh heat-admin@$host "sudo netstat -an | grep 7072"
ssh heat-admin@$host "sudo iscsiadm -m session -P 3 |grep State"
echo "===========$host mdm status==========="
ssh heat-admin@$host "sudo /opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms"
echo "===========$host chronyc status==========="
ssh heat-admin@$host "sudo date ; sudo chronyc tracking ; sudo chronyc sources ; sudo chronyc sourcestats"
echo "================================="
echo ">>>>>> Check service logs <<<<<<"
ssh heat-admin@$host "echo 'tail /var/log/containers/*/*.log | grep -i error | wc -l' > mon-logs.sh"
err_cnt=$(ssh heat-admin@$host "sudo sh mon-logs.sh")
if [[ $err_cnt -eq 0 ]]; then
echo "The $host has no error logs. This system is normal."
else
echo "Please check service logs"
ssh heat-admin@$host "echo 'tail /var/log/containers/*/*.log | grep -i error' > mon-logs.sh"
ssh heat-admin@$host "sudo sh mon-logs.sh"
fi
done
#echo "#============================"
#echo "# Check OpenStack Services "
#echo "#============================"
#source /home/stack/overcloudrc
source ~/overcloudrc
echo "openstack compute service list"
openstack compute service list
echo "openstack volume service list"
openstack volume service list
echo "openstack network agent list"
openstack network agent list
echo "#============================"
echo "# Check VM STATUS in HOST "
echo "#============================"
touch ~/chost.list ;
for chost_ip in $COM_HOSTS ;
do
openstack hypervisor list --long |grep -w "$chost_ip" |awk '{print $4}' >> ~/chost.list ;
done
for X in $(openstack server list --all --long |grep "$(cat ~/chost.list)" |awk '{print $2}') ;
do
echo "==========$X==========";
openstack server show $X |egrep '(name|status|hypervisor_hostname)' |egrep -v '(name=|:hostname|_name|key|flavor|security)' |grep -v '^$' |grep -v -e '^[[:space:]]*$' |awk '{ gsub(/ /,""); print }' ;
done
cat /dev/null > ~/chost.list
cat ./mon.sh.temp |grep -v "*" > ./mon.sh.log
rm ./mon.sh.temp운영 체크리스트
- 대상 OS, 버전, 네트워크 구간, 권한 범위가 현재 환경과 일치하는지 확인합니다.
- 운영 장비에서 실행하기 전 테스트 환경 또는 읽기 전용 명령으로 먼저 검증합니다.
- 설정 변경, 패키지 설치, 서비스 재시작이 포함되면 백업과 롤백 절차를 준비합니다.
실무 지원이 필요하다면
이 글의 내용을 실제 환경에 맞게 검증하거나 운영 절차로 정리해야 한다면, OpenStack/RHOSP 로그 분석, 점검 절차 정리, 운영 자동화를 1회성 기술 리뷰 또는 짧은 운영 개선 스프린트로 도와드릴 수 있습니다.
- 대상 환경과 현재 증상을 기준으로 실행 전 체크리스트를 정리합니다.
- 명령어, 로그, 설정 변경이 필요한 경우 안전한 검증 순서와 롤백 포인트를 분리합니다.
- OpenStack 모니터링 스크립트와 연결된 작업을 보고서, Runbook, 자동화 초안 형태로 정리합니다.