Đây là một câu hỏi tiếp theo từ này câu hỏi trước, được tạo bởi vì tôi đã tìm hiểu thêm thông tin và việc đặt câu hỏi này thành một câu hỏi mới sẽ dễ dàng hơn.
Tôi đang sử dụng syslog-ng OSE v3.31.2 để nhận các thông báo nhật ký hệ thống RFC3164 qua cổng UDP 514 từ một loạt máy khách và ghi chúng vào cả hai tệp, đồng thời chuyển tiếp chúng tới telegraf qua cổng TCP 601 RFC5424 không phải TLS để chèn vào một Cơ sở dữ liệu InfluxDB.
Cấu hình syslog-ng của tôi là:
phiên bản @: 3.29
@bao gồm "scl.conf"
tùy chọn {
flush-lines(1);
};
nguồn s_mạng {
udp(ip(0.0.0.0) cổng(514));
};
đích d_file {
tệp ("/var/log/tin nhắn");
};
điểm đến d_telegraf {
nhật ký hệ thống (cổng "telegraf" (601) vận chuyển (tcp));
};
nhật ký {
nguồn(s_mạng);
điểm đến (d_telegraf);
đích (d_file);
};
Phần có liên quan trong cấu hình telegraf của tôi trông như thế này:
[global_tags]
[đại lý]
khoảng thời gian = "100ms"
round_interval = true
metric_buffer_limit = 10000
flush_buffer_when_full = true
bộ sưu tập_jitter = "0s"
flush_interval = "100ms"
flush_jitter = "0s"
gỡ lỗi = đúng
im lặng = sai
[[đầu ra.influxdb]]
url = ["http://influxdb:8086"]
cơ sở dữ liệu = "log_db"
[[inputs.syslog]]
máy chủ = "tcp://telegraf:601"
Về cơ bản, syslog-ng được thiết lập để chuyển tiếp các mục nhật ký hệ thống qua kết nối TCP tới telegraf.
Vấn đề là tôi thấy syslog-ng thường xuyên bị ngắt kết nối TCP khỏi telegraf. Chúng hiển thị trong nhật ký syslog-ng dưới dạng:
[2021-11-17T02:55:32.662972] EOF xảy ra khi không hoạt động; fd='12'
[2021-11-17T02:55:32.663102] Đã đóng kết nối nhật ký hệ thống; fd='12', server='AF_INET(192.168.0.6:601)', time_reopen='60'
[2021-11-17T02:56:32.719139] Đã thiết lập kết nối nhật ký hệ thống; fd='12', server='AF_INET(192.168.0.6:601)', local='AF_INET(0.0.0.0:0)'
Việc ngắt kết nối này thường được kích hoạt khi tôi gửi nhật ký tới syslog-ng với:
logger -i -d --server kiểm tra máy chủ cục bộ
Nhưng nếu tôi để nó không hoạt động, tôi cũng sẽ nhận được:
[2021-11-17T02:57:05.392356] EOF trên kênh điều khiển, đóng kết nối;
Trong những trường hợp này, 192.168.0.6 là máy chủ telegraf.
Mặc dù tôi có thể đặt tùy chọn thời gian mở lại(1)
để tăng tốc độ kết nối lại, tôi muốn tìm ra nguyên nhân gốc rễ và ngăn chặn việc ngắt kết nối ngay từ đầu.
Có thể có sự không tương thích giữa syslog-ng và telegraf gây ra EOF này và ngắt kết nối không rõ ràng?
Tất cả điều này đang chạy trong ngăn xếp docker-compose trên một máy chủ duy nhất.
CHỈNH SỬA: Tôi đã bắt đầu xem xét RFC5424 và RFC6587. Sử dụng Wireshark để đánh hơi các gói ra khỏi syslog-ng, dành cho telegraf, tôi đã xác định rằng những gói này đang sử dụng kỹ thuật nhồi octet (hay còn gọi là tạo khung không trong suốt), thay vì đếm octet, điều mà telegraf mong đợi theo mặc định. Tải trọng của mỗi thông báo nhật ký hệ thống tới telegraf bắt đầu bằng ký tự "<" thay vì số nguyên.
Tôi đưa ra giả thuyết rằng telegraf đang chấp nhận các tin nhắn này nhưng gặp khó khăn khi phân tích cú pháp chúng và do đó đóng kết nối. FIN đầu tiên đóng kết nối đến từ telegraf.
Thật không may, khi tôi đặt telegraf chấp nhận khung không trong suốt, nó sẽ từ chối toàn bộ mục nhập và tôi vẫn chưa tìm ra lý do tại sao.
Tôi cũng chưa tìm ra cách định cấu hình syslog-ng để xuất thông báo với khung đếm octet.
Nhưng ít nhất thông báo EOF và mất kết nối đã ngừng xảy ra. Nhưng tôi không chắc điều đó có ý nghĩa nhiều nếu telegraf từ chối hoàn toàn tất cả các tin nhắn.