Python 리 눅 스 모니터링 방법

7381 단어
작업 원리: / proc 파일 시스템 기반
Linux 시스템 은 관리자 에 게 시스템 이 실 행 될 때 커 널 을 변경 할 수 있 도록 아주 좋 은 방법 을 제공 합 니 다. 커 널 시스템 을 다시 유도 하지 않 아 도 됩 니 다. 이것 은 / proc 가상 파일 시스템 을 통 해 이 루어 집 니 다. /proc 파일 가상 시스템 은 커 널 과 커 널 모듈 이 프로 세 스 (process) 에 정 보 를 보 내 는 메커니즘 (그래서 '/ proc' 라 고 함) 입 니 다. 이 가짜 파일 시스템 은 커 널 내부 데이터 구조 와 상호작용 을 하여 프로 세 스 와 관련 된 유용 한 정 보 를 얻 을 수 있 습 니 다. 실행 중 (on the fly) 설정 을 변경 할 수 있 습 니 다 (커 널 매개 변 화 를 통 해).다른 파일 시스템 과 달리 / proc 는 하 드 디스크 가 아 닌 메모리 에 존재 합 니 다.proc 파일 시스템 이 제공 하 는 정 보 는 다음 과 같 습 니 다.
프로 세 스 정보: 시스템 의 모든 프로 세 스 는 proc 의 하위 디 렉 터 리 에 같은 이름 의 프로 세 스 ID 가 있 습 니 다. cmdline, mem, root, stat, statm, status 를 찾 을 수 있 습 니 다.프로 세 스 루트 디 렉 터 리 와 같은 일부 정 보 는 슈퍼 사용자 만 볼 수 있 습 니 다.기 존 프로 세 스 정 보 를 단독으로 포함 하 는 프로 세 스 마다 사용 가능 한 전문 링크 가 있 습 니 다. 시스템 의 모든 프로 세 스 는 프로 세 스 정 보 를 가리 키 는 단독 링크 가 있 습 니 다. 그 용 도 는 프로 세 스에 서 명령 행 정 보 를 가 져 오 는 것 입 니 다.
시스템 정보: 전체 시스템 정 보 를 알 아야 한다 면 / proc / stat 에서 도 얻 을 수 있 습 니 다. 그 중에서 CPU 점용 상황, 디스크 공간, 메모리 교환, 중단 등 을 포함 합 니 다.
CPU 정보: / proc / CPU info 파일 을 이용 하여 중앙 처리 장치 의 현재 정확 한 정 보 를 얻 을 수 있 습 니 다.
부하 정보: / proc / loadavg 파일 은 시스템 부하 정 보 를 포함 합 니 다.
시스템 메모리 정보: / proc / meminfo 파일 은 시스템 메모리 의 상세 한 정 보 를 포함 하고 있 으 며, 물리 적 메모리 의 수량, 교환 가능 한 공간의 수량, 남 은 메모리 의 수량 등 을 표시 합 니 다.
/ proc 디 렉 터 리 의 주요 파일 설명
-   apm 고급 전원 관리 정보
-   cmdline 이 파일 은 커 널 시작 명령 줄 을 보 여 줍 니 다.
-   CPU info 중앙 처리 장치 정보
-   devices 에서 사용 할 수 있 는 장치 (블록 장치 / 문자 장치)
-   dma 현재 사용 중인 DMA 채널 표시
-   filesystems 핵심 설정 파일 시스템
-   ioports 현재 사용 중인 I / O 포트
-   interrupts  이 파일 의 줄 마다 보류 중단 이 있 습 니 다.
-   kcore   시스템 물리 메모리 이미지
-   kmsg    핵심 출력 메시지, 로그 파일 로 보 내기
-   mdstat  이 파일 은 md 장치 드라이버 가 제어 하 는 RAID 장치 정 보 를 포함 하고 있 습 니 다.
-   loadavg 시스템 평균 부하 균형
-   meminfo 메모리 사용 정보, 물리 메모리 및 교환 메모리 포함
-   modules 이 파일 은 커 널 모듈 을 불 러 올 수 있 는 정 보 를 제공 합 니 다.lsmod 프로그램 은 이 정보 로 모듈 의 이름, 크기, 사용 수량 에 대한 정 보 를 표시 합 니 다.
-   net 네트워크 프로 토 콜 상태 정보
-   partitions  시스템 식별 구역 표
-   pci pci 장치 정보
-   scsi    scsi 장치 정보
-   self    프로 세 스 디 렉 터 리 를 보기 위 한 기호 연결
-   stat    이 파일 에 포 함 된 정 보 는 CPU 이 용 률, 디스크, 메모리 페이지, 메모리 교환, 모든 중단, 접촉 스위치 및 자체 제공 시간 이 있 습 니 다.
-   swaps   교환 파 티 션 의 사용 상황 을 보 여 줍 니 다.
-   uptime  이 파일 은 마지막 시스템 에서 들 어 온 초 수 와 그 중 몇 초 동안 비어 있 습 니까?
-   version 이 파일 은 실행 중인 커 널 버 전 을 설명 하 는 한 줄 의 내용 만 있 습 니 다.표준 프로 그래 밍 방법 으로 분석 하여 필요 한 시스템 정 보 를 얻 을 수 있다.
CPU 정보 가 져 오기

#!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
import pprint
def CPUinfo():
''' Return the information in /proc/CPUinfo
as a dictionary in the following format:
CPU_info['proc0']={...}
CPU_info['proc1']={...}
'''
CPUinfo=OrderedDict()
procinfo=OrderedDict()
nprocs = 0
with open('/proc/CPUinfo') as f:
for line in f:
if not line.strip():
# end of one processor
CPUinfo['proc%s' % nprocs] = procinfo
nprocs=nprocs+1
# Reset
procinfo=OrderedDict()
else:
if len(line.split(':')) == 2:
procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
else:
procinfo[line.split(':')[0].strip()] = ''
return CPUinfo
if __name__=='__main__':
CPUinfo = CPUinfo()
for processor in CPUinfo.keys():
print(CPUinfo[processor]['model name'])

목록 1 을 간단히 설명 하고 / proc / CPU info 의 정 보 를 읽 고 list 를 되 돌려 주 며 핵심 마다 dict 를 되 돌려 줍 니 다.그 중에서 list 는 괄호 로 묶 은 질서 있 는 요소 집합 입 니 다.List 는 0 으로 표 시 된 배열 로 시작 할 수 있 습 니 다.Dict 는 Python 의 내 장 된 데이터 형식 중 하나 로 키 와 값 간 의 일대일 관 계 를 정의 합 니 다.OrderedDict 는 사전 하위 클래스 로 내용 이 증가 하 는 순 서 를 기억 할 수 있 습 니 다.일반적인 dict 는 삽입 순 서 를 추적 하지 않 고 교체 처리 할 때 키 가 산 목록 에 저 장 된 순서에 따라 값 을 생 성 합 니 다.OrderedDict 에 서 는 반대로 요소 가 삽 입 된 순 서 를 기억 하고 교체 기 를 만 들 때 이 순 서 를 사용 합 니 다.
시스템 부하 정보 가 져 오기

#!/usr/bin/env Python  
import os 
def load_stat(): 
loadavg = {} 
f = open("/proc/loadavg") 
con = f.read().split() 
f.close() 
loadavg['lavg_1']=con[0] 
loadavg['lavg_5']=con[1] 
loadavg['lavg_15']=con[2] 
loadavg['nr']=con[3] 
loadavg['last_pid']=con[4] 
return loadavg 
print "loadavg",load_stat()['lavg_15']

목록 2: 목록 2 읽 기 / proc / loadavg 의 정 보 를 간단하게 설명 합 니 다. import os: Python 에서 import 는 서로 다른 모듈 을 가 져 오 는 데 사 용 됩 니 다. 시스템 제공 과 사용자 정의 모듈 을 포함 합 니 다.그 기본 형식 은 import 모듈 이름 [as 별명] 입 니 다. 모듈 의 일부 나 모든 내용 만 가 져 오 면 형식: from 모듈 이름 import * 로 해당 모듈 을 가 져 올 수 있 습 니 다.OS 모듈 os 모듈 은 통 일 된 운영 체제 인터페이스 함 수 를 제공 합 니 다. os 모듈 은 서로 다른 운영 체제 플랫폼, 예 를 들 어 nt, posix 중의 특정한 함수 간 에 자동 으로 전환 하여 크로스 플랫폼 작업 을 실현 할 수 있 습 니 다.
메모리 사용 현황 가 져 오기

!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
def meminfo():
''' Return the information in /proc/meminfo
as a dictionary '''
meminfo=OrderedDict()
with open('/proc/meminfo') as f:
for line in f:
meminfo[line.split(':')[0]] = line.split(':')[1].strip()
return meminfo
if __name__=='__main__':
#print(meminfo())
meminfo = meminfo()
print('Total memory: {0}'.format(meminfo['MemTotal']))
print('Free memory: {0}'.format(meminfo['MemFree']))

네트워크 인터페이스의 입 출력 가 져 오기
   

#!/usr/bin/env Python
  import time
  import sys
  if len(sys.argv) > 1:
    INTERFACE = sys.argv[1]
  else:
    INTERFACE = 'eth0'
  STATS = []
  print 'Interface:',INTERFACE
  def rx():
    ifstat = open('/proc/net/dev').readlines()
    for interface in ifstat:
      if INTERFACE in interface:
        stat = float(interface.split()[1])
        STATS[0:] = [stat]
  def tx():
    ifstat = open('/proc/net/dev').readlines()
    for interface in ifstat:
      if INTERFACE in interface:
        stat = float(interface.split()[9])
        STATS[1:] = [stat]
  print  'In     Out'
  rx()
  tx()
  while  True:
    time.sleep(1)
    rxstat_o = list(STATS)
    rx()
    tx()
    RX = float(STATS[0])
    RX_O = rxstat_o[0]
    TX = float(STATS[1])
    TX_O = rxstat_o[1]
    RX_RATE = round((RX - RX_O)/1024/1024,3)
    TX_RATE = round((TX - TX_O)/1024/1024,3)
    print RX_RATE ,'MB   ',TX_RATE ,'MB'

crtrl. py 아파 치 서버 프로 세 스 를 감시 하 는 Python 스 크 립 트

#!/usr/bin/env Python 
import os, sys, time 
while True: 
time.sleep(4) 
try: 
ret = os.popen('ps -C apache -o pid,cmd').readlines() 
if len(ret) < 2: 
print "apache       , 4       " 
time.sleep(3) 
os.system("service apache2 restart") 
except: 
print "Error", sys.exc_info()[1]

총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Python 이 리 눅 스 모니터링 을 실현 하 는 방법 입 니 다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다. 궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요. 소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기