rx_bytes 및 tx_bytes를 강제로 재설정하는 방법은 무엇입니까?

rx_bytes 및 tx_bytes를 강제로 재설정하는 방법은 무엇입니까?

네트워크 인터페이스에서 데이터 전송을 추적하고 있는데 0매월 1일로 재설정하고 싶습니다.

시도하거나 제출하면 echo 0다음 rx_bytestx_bytes같은 결과가 나타납니다.

bash: /sys/class/net/wlan0/statistics/rx_bytes: Permission denied

이 명령을 루트로 실행하고 있습니다.

또한 파일 복사(덮어쓰기)도 시도했습니다.

cp: cannot create regular file:‘/sys/class/net/wlan0/statistics/rx_bytes’: Permission denied

또한 권한을 다음으로 변경해 보았습니다. 777(기본값은 444)

답변1

일반적인 접근 방식은 월 변경에 따라 값을 저장하고 해당 값과의 차이를 계산하는 것입니다. 이렇게 하면 여러 시간 간격에 걸쳐 값을 쉽게 계산할 수 있으며 서로의 숫자를 밟지 않고도 여러 독립 소비자가 있는 단일 데이터 소스를 사용할 수도 있습니다. 또한 카운터를 지우려면 카운터를 자동으로 읽고 지우는 방법이 필요합니다. 그렇지 않으면 카운터를 읽고 지우는 사이에 트래픽 카운트가 손실됩니다. SNMP와 같은 것들은 일반적으로 읽기 전용 카운터도 제공합니다.

그래서 나는 당신이 정말로 카운터를 청소하고 싶지 않다고 생각합니다.

rrdtool네트워크 통계를 표시하도록 설계된 프로그램은 랩어라운드 문제(예: 패턴 있음 ) 를 처리할 수 있는 경우가 많습니다 COUNTER. 그래도 여전히 64비트 카운터를 사용하고 싶을 것입니다. 기가비트 인터페이스와 5분 폴링 속도를 사용할 때 32비트 오버플로 문제가 발생한 것을 기억하기 때문입니다.

답변2

/proc의 파일은 상식적으로 실제 파일이 아니라 Linux 커널의 변수에 "창"/인터페이스를 제공하는 가상 파일이기 때문에 수행 중인 파일 조작 작업이 작동하지 않을 수 있습니다.

인터페이스 카운터를 재설정하는 유일한 방법은 해당 인터페이스 커널 모듈을 언로드했다가 다시 로드하는 것입니다.

eth0의 커널 모듈을 찾으세요:

$sudo ethtool -i eth0 | grep driver
driver: vmxnet3

그런 다음 커널 모듈을 언로드하고 로드합니다.

sudo -- sh -c  'ifdown eth0 ; modprobe -r vmxnet3; modprobe vmxnet3 ; ifup eth0'

위의 sudo 구문을 사용하지 않는 경우 위 명령을 사용하여 스크립트를 생성하는 것이 좋습니다. 그렇지 않으면 일부 상황에서 원격 Linux 시스템에 대한 제어권을 잃을 수 있습니다.

eth0을 모니터링하는 프로세스(예: watchdog)가 있는 경우 모듈을 제거하기 전에 해당 프로세스도 중지해야 합니다.

답변3

좋아요, 제 경우에는 카운터를 강제로 재설정하는 유일한 방법은 서버를 다시 시작하는 것이었습니다. 이상적이지는 않지만 그렇습니다.

말한 바와 같이이르카초, 가장 좋은 방법은 새 달이 시작될 때 값을 저장한 다음 해당 시점부터 계산하는 것입니다. 그러나 현재 설정한 스크립트로는 이를 우아한 방식으로 수행할 수 없습니다.

그래서 한 달에 한 번씩 서버를 다시 시작하는 시나리오를 선택했습니다. 아래에 사용하는 코드 조각을 포함했습니다.

# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
        # CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi

# CREATE A NEW FILE EVERY TIME THIS IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month

# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
        # RUN YOUR RELEVANT CODE HERE #
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month     # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
        reboot now                                                              # REBOOT
        exit 0                                                                  # AND EXIT THIS SCRIPT
fi

관련 정보