Điểm:0

syslog-ng: cách định cấu hình gửi tin nhắn RFC5424 với khung đếm octet

lá cờ al

Xin đừng bận tâm đọc câu hỏi này. syslog-ng đã được thiết lập để gửi tin nhắn RFC5424 với khung đếm octet theo mặc định. Tôi đã bối rối trước hành vi của một thành phần khác. Câu hỏi này không hợp lệ.


Tôi có cấu hình syslog-ng OSE (v3.31.2):

phiên bản @: 3.29
@bao gồm "scl.conf"
    
nguồn s_mạng {
    udp(ip(0.0.0.0) cổng(514));
};
    
đích d_network_telegraf {
    nhật ký hệ thống (cổng "telegraf" (601) vận chuyển (tcp));
};
    
nhật ký {
    nguồn(s_mạng);
    đích (d_network_telegraf);
};

Mục đích là chuyển tiếp RFC3164 các thông báo nhật ký hệ thống được định dạng nhận được trên cổng UDP 514 và chuyển tiếp chúng dưới dạng RFC5424 tin nhắn được định dạng thành telegraf trên cổng TCP 601.

Với cấu hình này, syslog-ng dường như đang phát ra các tin nhắn được chuyển tiếp dưới dạng RFC5424 với khung không trong suốt (nhồi octet) (tin nhắn bắt đầu bằng ký tự ASCII <). Thật không may, telegraf mong muốn nhận được tin nhắn với khung đếm octet (tin nhắn bắt đầu bằng một chữ số). RFC6587 bao gồm những.

Mặc dù có thể định cấu hình telegraf để tạo khung không trong suốt, nhưng điều này dường như không hoạt động chính xác. Trước khi tìm hiểu kỹ vấn đề đó, tôi muốn thử giải pháp thay thế, đó là định cấu hình syslog-ng để xuất thông báo RFC5424 với khung đếm octet. Dù sao thì đây rõ ràng là kiểu khung được đề xuất.

Tuy nhiên, tôi không thể tìm thấy bất cứ điều gì trong tài liệu syslog-ng về điều này. Trong hầu hết các trường hợp, tài liệu thảo luận về việc sử dụng nhật ký hệ thống lái xe cho đầu vào, không phải đầu ra, và gần như có không đề cập đến đếm octet.

Có thể cấu hình syslog-ng theo cách này không?


CHỈNH SỬA

Đây là cấu hình chính xác tôi đang sử dụng:

phiên bản @: 3.29
@bao gồm "scl.conf"

tùy chọn {
    tạo thư mục (có);
    flush-lines(1);
    thời gian mở lại (60);
};

nguồn s_local {
    hệ thống();
    nội bộ();
};

nguồn s_mạng {
    udp(ip(0.0.0.0) cổng(514));
};

đích đến d_local {
    tệp ("/data/syslog-ng/var/log/message");
    tệp ("/data/syslog-ng/var/log/messages-kv.log" mẫu ("$ISODATE $HOST $(format-welf --scope all-nv-pairs)\n") frac-digits(3 ));
};

đích d_network_files {
    tệp ("/data/syslog-ng/var/log/message-mạng");
    tệp ("/data/syslog-ng/var/log/messages-network-kv.log" mẫu ("$ISODATE $HOST $(format-welf --scope all-nv-pairs)\n") chữ số frac (3));
};

đích d_network_telegraf {
    nhật ký hệ thống (cổng "telegraf" (601) vận chuyển (tcp));
};

nhật ký {
    nguồn(s_mạng);
    đích (d_network_telegraf);
    đích (d_network_files);
};

Đây là một tin nhắn được gửi bởi logger -i -d --server localhost đây là thử nghiệm đến syslog-ng qua cổng UDP 514:

0000 02 42 ac 15 00 09 02 42 69 3a f6 78 08 00 45 00 .B.....Bi:.x..E.
0010 00 a6 79 e7 40 00 40 11 68 2b ac 15 00 01 ac 15 ..y.@[email protected]+......
0020 00 09 b4 bd 02 02 00 92 58 d8 3c 31 33 3e 31 20 ........X.<13>1 
0030 32 30 32 31 2d 31 31 2d 31 38 54 31 32 3a 34 31 2021-11-18T12:41
0040 3a 35 39 2e 39 34 33 39 36 35 2b 31 33 3a 30 30 :59.943965+13:00
0050 20 6b 6f 72 69 6d 61 6b 6f 20 64 61 76 69 64 20 korimako david 
0060 36 38 38 31 34 30 20 2d 20 5b 74 69 6d 65 51 75 688140 - [timeQu
0070 61 6c 69 74 79 20 74 7a 4b 6e 6f 77 6e 3d 22 31 tính chất tzKnown="1
0080 22 20 69 73 53 79 6e 63 65 64 3d 22 31 22 20 73 " isSynced="1" s
0090 79 6e 63 41 63 63 75 72 61 63 79 3d 22 37 39 37 yncAccuracy="797
00a0 30 30 30 22 5d 20 74 68 69 73 20 69 73 20 61 20 000"] đây là 
00b0 74 65 73 74 kiểm tra

Và đây là một tin nhắn được chụp giữa syslog-ng và telegraf (cổng TCP 601):

0000 02 42 ac 15 00 07 02 42 ac 15 00 09 08 00 45 00 .B.....B......E.
0010 00 ec ba 61 40 00 40 06 27 70 ac 15 00 09 ac 15 ...a@.@.'p......
0020 00 07 a7 ab 02 59 be 1c 32 98 d1 f9 90 93 80 18 .....Y..2.......
0030 01 f6 59 19 00 00 01 01 08 0a 0c 3e 2a 2d 7a e2 ..Y........>*-z.
0040 58 de 3c 31 33 3e 31 20 32 30 32 31 2d 31 31 2d X.<13>1 2021-11-
0050 31 37 54 32 33 3a 34 31 3a 35 39 2b 30 30 3a 30 17T23:41:59+00:0
0060 30 20 31 37 32 2e 32 31 2e 30 2e 31 20 31 20 2d 0 172.21.0.1 1 -
0070 20 2d 20 2d 20 32 30 32 31 2d 31 31 2d 31 38 54 - - 2021-11-18T
0080 31 32 3a 34 31 3a 35 39 2e 39 34 33 39 36 35 2b 12:41:59.943965+
0090 31 33 3a 30 30 20 6b 6f 72 69 6d 61 6b 6f 20 64 13:00 korimako d
00a0 61 76 69 64 20 36 38 38 31 34 30 20 2d 20 5b 74 cuồng nhiệt 688140 - [t
00b0 69 6d 65 51 75 61 6c 69 74 79 20 74 7a 4b 6e 6f imeQuality tzKno
00c0 77 6e 3d 22 31 22 20 69 73 53 79 6e 63 65 64 3d wn="1" isSynced=
00d0 22 31 22 20 73 79 6e 63 41 63 63 75 72 61 63 79 "1" đồng bộ Độ chính xác
00e0 3d 22 37 39 37 30 30 30 22 5d 20 74 68 69 73 20 = "797000"] cái này 
00f0 69 73 20 61 20 74 65 73 74 0a là một thử nghiệm.

Bạn có thể thấy rằng thông báo bắt đầu ở byte 66 (0x42), bắt đầu bằng một < nhân vật (<13>1 2021...). Theo RFC6587, điều này được hiểu không phải là tạo khung đếm bộ tám mà là thay thế: tạo khung không minh bạch.

Nhật ký đầy đủ của syslog-ng cho sự kiện này là:

[2021-11-17T23:41:59.944928] Mục nhật ký đến; line='<13>1 2021-11-18T12:41:59.943965+13:00 korimako david 688140 - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="797000"] đây là thử nghiệm'
[2021-11-17T23:41:59.987236] Tin nhắn đi; message='2021-11-17T23:41:59.944+00:00 172.21.0.1 HOST=172.21.0.1 HOST_FROM=172.21.0.1 LEGACY_MSGHDR="1 " MESSAGE="2021-11-18T12:41:59.943965+13:00 korimako david 688140 - [timeQuality tzKnown=\"1\" isSynced=\"1\" syncAccuracy=\"797000\"] đây là thử nghiệm" PROGRAM=1 SOURCE=s_network\x0a'
[2021-11-17T23:41:59.987403] Tin nhắn đi; message='17 tháng 11 23:41:59 172.21.0.1 1 2021-11-18T12:41:59.943965+13:00 korimako david 688140 - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="797000"] this là một thử nghiệm\x0a'
[2021-11-17T23:42:31.994550] Đã thiết lập kết nối nhật ký hệ thống; fd='12', server='AF_INET(172.21.0.7:601)', local='AF_INET(0.0.0.0:0)'
[2021-11-17T23:42:31.994946] Tin nhắn đi; message='<13>1 2021-11-17T23:41:59+00:00 172.21.0.1 1 - - - 2021-11-18T12:41:59.943965+13:00 korimako david 688140 - [timeQuality tzKnown="1 " isSynced="1" syncAccuracy="797000"] đây là thử nghiệm\x0a'
[2021-11-17T23:42:36.996059] EOF xảy ra khi không hoạt động; fd='12'
[2021-11-17T23:42:36.996187] Đã đóng kết nối nhật ký hệ thống; fd='12', server='AF_INET(172.21.0.7:601)', time_reopen='60'
[2021-11-17T23:43:36.996635] Đã thiết lập kết nối nhật ký hệ thống; fd='12', server='AF_INET(172.21.0.7:601)', local='AF_INET(0.0.0.0:0)'

CẬP NHẬT 1: Tôi đã tìm thấy giá trị đếm octet bị thiếu ở đầu thông báo - giá trị này nằm trong khung TCP trước đó. Tôi nghĩ rằng điều này có nghĩa là đầu ra từ syslog-ng rốt cuộc đang sử dụng khung đếm octet. Tôi hiện đang tích cực gỡ lỗi nguồn telegraf vì tôi nghĩ rằng nó đang nhận được tin nhắn nhưng lại đóng kết nối do nhầm lẫn sau đó. Tôi sẽ cập nhật điều này khi tôi khám phá thêm.


CẬP NHẬT 2: Tôi đã xác định rằng plugin nhật ký hệ thống telegraf có lỗi hoặc lỗi trong tài liệu của nó và đang ngắt kết nối mọi kết nối TCP đến không hoạt động trong hơn 5 giây. Đây không phải là vấn đề phân tích cú pháp đơn thuần là thời gian chờ.

Do đó, không có vấn đề gì với syslog-ng và toàn bộ câu hỏi này là vô hiệu.

Điểm:0
lá cờ vn

syslog-ng có thể được cấu hình để hỗ trợ tất cả các kết hợp: định dạng RFC3164 hoặc RFC5424, có hoặc không có kỹ thuật tạo khung được xác định trong RFC6587.

nhật ký hệ thống() sử dụng khung RFC6587 (đếm octet) và ưu tiên RFC5424 làm định dạng thông báo, nhưng quay lại RFC3164 ở phía nguồn, khi phân tích cú pháp RFC5424 không thành công.

mạng() hoạt động không có khung (không đếm octet - điều này được gọi là "Khung không trong suốt" trong RFC) và mặc định của nó là RFC3164, nhưng điều này có thể được thay đổi (thành RFC5424) với cờ (giao thức nhật ký hệ thống) lá cờ.

lá cờ al
Khi sử dụng `syslog()` hoặc `network(... flags(syslog-protocol))` làm cách nào để bạn chuyển đổi giữa chế độ đếm octet và không trong suốt (nhồi octet)? Tôi hiện đang sử dụng `syslog()` và có vẻ như nó chỉ không minh bạch. Cả hai chế độ này đều được hỗ trợ bởi RFC6587. Có lẽ có một tùy chọn đặc biệt để chuyển nó sang đếm octet? Tôi không thể tìm thấy bất cứ điều gì trong các tài liệu về điều này mặc dù.
MrAnno avatar
lá cờ vn
syslog() nên sử dụng tính năng đếm octet, trong khi network() sử dụng phương pháp "tạo khung không trong suốt" cũ (tách các thư bằng \n).
MrAnno avatar
lá cờ vn
Nếu không phải như vậy, bạn có thể đã tìm thấy một lỗi. Bạn có đang sử dụng chính xác cấu hình mà bạn đã chia sẻ không?
lá cờ al
Tôi đã cập nhật nội dung câu hỏi của mình để bao gồm cấu hình đầy đủ mà tôi đang sử dụng, cùng với một số ảnh chụp Wireshark và nhật ký bảng điều khiển syslog-ng tương ứng. Hãy cho tôi biết nếu bất cứ điều gì khác có thể hữu ích để xem.
lá cờ al
Một cập nhật khác - Tôi đã tìm thấy tiền tố "[chữ số]" đếm octet 'bị thiếu' trong khung TCP trước đó, do đó, nó có trong luồng. Tôi đã bỏ lỡ điều này. Vì vậy, điều này có nghĩa là syslog-ng *is* xuất ra khung đếm bộ tám, như mong đợi. Tuy nhiên, tôi nghĩ chắc chắn có vấn đề với cách telegraf xử lý các tin nhắn này, vì nó đang chủ động đóng kết nối sau mỗi tin nhắn do hết thời gian chờ. Tôi đang sửa lỗi này ngay bây giờ. Dù sao đi nữa, @MrAnno, cảm ơn bạn đã dành thời gian phản hồi vấn đề này và tôi xin lỗi vì đã lãng phí nó.
MrAnno avatar
lá cờ vn
Hân hạnh. Hừm, thật thú vị. Có một điều có thể thú vị đối với bạn: Trong trường hợp telegraf gửi bất kỳ thứ gì trở lại syslog-ng, hành vi mặc định là đóng kết nối, bởi vì trình điều khiển mạng(), syslog() không mong đợi câu trả lời từ máy chủ. Nếu đúng như vậy, bạn có thể thử tùy chọn không có giấy tờ sau: `đóng khi nhập (không)`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.