hệ thống linux nhảy theo thời gian


8

Tôi thấy một hành vi thay đổi thời gian hệ thống kỳ lạ trong một số máy chủ (phần cứng): trong / var / log / syslog, thời gian ngày trước mỗi thông điệp tường trình đôi khi thay đổi thành một thông báo ngẫu nhiên và trở lại bình thường trong thông báo tiếp theo, như sau:

Ngày 22 tháng 2 năm 2018 09:09:30 ...
Ngày 22 tháng 2 năm 2018 09:09:32 ...
Ngày 13 tháng 1 2610 15:37:42 ...
Ngày 22 tháng 2 năm 2018 09:09:33 ...
Ngày 22 tháng 2 năm 2018 09:09:34 ...

Như trong ví dụ, sự thay đổi đột ngột của thời gian ngày có thể cách xa hàng trăm năm.

Tôi có thể xác nhận rằng các thông điệp tường trình có dấu thời gian lạ không đến từ bất kỳ quy trình cụ thể nào - nó chỉ có thể xảy ra ngẫu nhiên cho mỗi người.

Và thời lượng giữa 2 thay đổi thời gian bất thường thay đổi từ vài phút đến vài giờ (tuy nhiên, tôi nghi ngờ sự thay đổi thời gian bất thường có thể xảy ra thường xuyên hơn nhưng nhiều trong số chúng không được tiết lộ trong syslog, vì nó không ghi nhật ký mỗi giây).

Ngoài ra, vì nó xảy ra trên nhiều máy chủ, tôi cho rằng đó không phải là vấn đề phần cứng.

Thông tin thêm về các sever: chúng là một bản cài đặt openstack với một bộ điều khiển và một vài nút tính toán. Mỗi máy chủ có dịch vụ ntp đang chạy. Bộ điều khiển được cấu hình để lấy thời gian từ đồng hồ phần cứng của chính nó và máy chủ nút tính toán thời gian đồng bộ hóa từ bộ điều khiển. Lưu ý rằng mỗi máy chủ có thay đổi thời gian bất thường theo tốc độ của riêng nó - có vẻ như "thời gian sai" không được đồng bộ hóa từ bộ điều khiển thông qua ntp.

Tôi đã nghi ngờ các hệ thống khách (máy ảo) trên các nút tính toán có thể ảnh hưởng đến thời gian hệ thống máy chủ của chúng. Nhưng điều này không thể giải thích tại sao bộ điều khiển có cùng một vấn đề trong khi không chạy bất kỳ máy ảo nào.

Tôi cần một phương pháp để phát hiện: ai đã thay đổi thời gian hệ thống và nó xảy ra như thế nào?


2
Bạn có thể hiển thị đầu ra của một hwclockvòng lặp? Một cái gì đó như:while true; do hwclock; sleep 5; done
shodanshok

mỗi máy chủ có dịch vụ ntp đang chạy: như máy khách hay máy chủ? thông qua systemd hoặc bên ngoài systemd thông qua dịch vụ ntp "cũ"? Đối với tôi điều này trông giống như một vấn đề thời gian cung cấp ntp. chúng tôi gặp vấn đề là chúng tôi đã viết logfiles trước khi thời gian của chúng tôi được đồng bộ hóa (trước khi có kết nối mạng, dẫn đến các dấu thời gian) systemd có một mục tiêu mà bạn có thể muốn dựa vào systemd [1]: Thời gian đã được thay đổi systemd [1]: Đạt được mục tiêu Thời gian hệ thống được đồng bộ hóa.
Dennis Nolte

có vẻ như một số ngày tìm nạp đang chạy như một cron và không có thời gian kiểm tra rất tốt. Tìm nó, loại bỏ nó và thay thế bằng ntpd không đáp ứng với thời gian trôi nhanh.
danblack

Chúng tôi có những phát hiện mới và nhận thấy vấn đề có thể được thu hẹp trong các thông điệp CRON bị trì hoãn trong syslog. Vì vậy, tôi đã đăng một câu hỏi khác . Xin hãy xem đó.
Zhaohui Yang

3
Có thể đây là lỗi của bạn: Thời gian không thể giải thích được nhảy trong CRON, nó đã được vá trong rsyslog - 7.4.4-1ubfox2.7 .
Đá

Câu trả lời:


1

Kịch bản lệnh này sẽ cho bạn biết khi nào thời gian trôi xảy ra và sự khác biệt trong cây quy trình và điều này sẽ giúp xác định điều này nếu nguyên nhân là do quá trình thay đổi thời gian hệ thống. Nó sẽ in ra terminal cũng như đăng nhập vào timedrift.log bên trong thư mục làm việc hiện tại.

#!/bin/bash

oldTime="$(date +%s)"
oldPsOutput="$(ps faux)"
while true; do
  sleep 1;
  currentTime="$(date +%s)"
  oldTimeplusfive="$((($oldTime+5)))"
  currentPsOutput="$(ps faux)"
  if [[ "$currentTime" -lt "$oldTime" ||  "$currentTime" -gt "$oldTimeplusfive"  ]]
  then
    (
        echo -e '\n\n======================='
        echo "currentTime=$currentTime oldTime=$oldTime oldTimeplusfive=$oldTimeplusfive"
        echo '-----------------------'
        echo "$oldPsOutput"
        echo '::::::::::::::::::::::::::'
        echo "$currentPsOutput"
    ) | tee -a timedrift.log
  fi
  oldPsOutput=$currentPsOutput
  oldTime=$currentTime
done

Tín dụng cho kịch bản gốc trong thời gian không thể giải thích được nhảy trong lỗi CRON mà Stone đề cập như một nhận xét.

Bạn cũng có thể bình luận như thể bạn đang sử dụng rsyslog và nếu vậy phiên bản nào? Bạn có thấy nó bên ngoài vương quốc của rsyslog (tức là nhật ký apache, v.v.). Lỗi này trông giống như simmlar, và thật tốt khi xác nhận hoặc loại trừ nó theo bất kỳ cách nào.


0

Trên thực tế đây là một bản sao của nhận xét của @Stone. Chỉ cần làm cho nó rõ ràng cho tất cả mọi người điều này có một câu trả lời.

Nói tóm lại, có một lỗi trong phiên bản rsyslog tôi đang sử dụng. Điều này sẽ trì hoãn thông báo nhật ký hệ thống mà nó nhận được trong khoảng thời gian tùy ý. Báo cáo lỗi là ở đây. Và nâng cấp rsyslog đã giải quyết vấn đề. Đây không phải là lỗi của kernel hay CRON.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.