Làm cách nào để tôi có được rsyslogd để đăng nhập FQDN của máy chủ thay vì tên máy chủ ngắn?


22

Tôi đang cố gắng triển khai một máy chủ syslog tập trung đơn giản bằng cách sử dụng stock rsyslogd (4.2.0-2ubfox8.1) trên Ubuntu 10.04 LTS. Tại thời điểm này, tôi có tất cả các nút máy khách của mình gửi nhật ký đến máy chủ trung tâm, nhưng các máy khách đang gửi thông điệp nhật ký có chứa tên máy chủ ngắn thay vì FQDN của chúng.

Theo trang chủ rsyslogd của Ubuntu:

Nếu máy chủ từ xa nằm trong cùng miền với máy chủ, rsyslogd đang chạy, chỉ tên máy chủ đơn giản sẽ được ghi lại thay vì toàn bộ fqdn.

Đây là vấn đề đối với tôi, vì tôi đang sử dụng lại tên ngắn giữa các môi trường, ví dụ core1.example.com và core1.stg.example.com đều ghi thông điệp của họ dưới dạng core1.

Cả máy khách và máy chủ đều có cùng / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4"

và cùng tệp /etc/rsyslogd.conf:

$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf

Khách hàng có tệp /etc/rsyslog.d/remote.conf này, bảo họ gửi đến máy chủ từ xa:

*.* @@syslog.example.com

và máy chủ sử dụng tệp /etc/rsyslog.d/server.conf này:

$ModLoad imtcp
$InputTCPServerRun 514
$DirGroup root
$DirCreateMode 0755
$FileGroup root
$template PerHostAuth,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/auth.log"
$template PerHostCron,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/cron.log"
$template PerHostSyslog,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog"
$template PerHostDaemon,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/daemon.log"
$template PerHostKern,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/kern.log"
$template PerHostLpr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/lpr.log"
$template PerHostUser,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/user.log"
$template PerHostMail,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.log"
$template PerHostMailInfo,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.info"
$template PerHostMailWarn,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.warn"
$template PerHostMailErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.err"
$template PerHostNewsCrit,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.crit"
$template PerHostNewsErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.err"
$template PerHostNewsNotice,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.notice"
$template PerHostDebug,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/debug"
$template PerHostMessages,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages"
auth,authpriv.*         ?PerHostAuth
*.*;auth,authpriv.none  -?PerHostSyslog
cron.*                  ?PerHostCron
daemon.*                -?PerHostDaemon
kern.*                  -?PerHostKern
lpr.*                   -?PerHostLpr
mail.*                  -?PerHostMail
user.*                  -?PerHostUser
mail.info               -?PerHostMailInfo
mail.warn               ?PerHostMailWarn
mail.err                ?PerHostMailErr
news.crit               ?PerHostNewsCrit
news.err                ?PerHostNewsErr
news.notice             -?PerHostNewsNotice
*.=debug;\
   auth,authpriv.none;\
   news.none;mail.none   -?PerHostDebug
   *.=info;*.=notice;*.=warn;\
      auth,authpriv.none;\
      cron,daemon.none;\
      mail,news.none        -?PerHostMessages

Vì cả máy khách và máy chủ đều chia sẻ một cấu hình chỉ định "$ PreserveFQDN trên", tôi hy vọng sẽ thấy tên máy chủ FQDN trong các thông báo nhật ký hệ thống, nhưng cài đặt dường như không có hiệu lực. Hầu hết các cài đặt khác mà tôi đã tìm thấy cho rsyslog đều nhằm mục đích tước tên miền từ FQDN thay vì giữ lại chúng. Tôi nghĩ rằng gốc rễ của vấn đề là khách hàng của tôi không gửi FQDN ngay từ đầu, nhưng tôi không thấy cách buộc hành vi đó.

Bất cứ ai có thể nhận xét về những gì tôi có thể thiếu? Tôi tưởng tượng tôi không phải là người duy nhất cần FQDN được đưa vào thông điệp tường trình.


Sau đó, tôi đã xây dựng và cài đặt gói rsyslog 4.6.4-2ubfox4 từ Ubuntu 11.04 trên máy chủ của mình và một tập hợp con các nút máy khách của tôi, nhưng kết quả là không thấy sự thay đổi trong hành vi này.
cwjohnston

Câu trả lời:


38

Tôi cũng gặp vấn đề này. Đây là cách tôi có thể sửa nó.

  1. Trên máy khách sửa đổi tệp / etc / hosts để tên máy chủ mong muốn xuất hiện trước localhost.

    Tên máy chủ 127.0.0.1 cho localhost

  2. Trên máy khách và máy chủ sửa đổi /etc/rsyslog.conf để bao gồm tuyên bố này:

    $ PreserveFQDN trên

  3. Trên máy chủ, tôi đã sử dụng biến% HOSTNAME% cho các mẫu trong rsyslog.conf:


1
Điều này nên được đánh dấu là câu trả lời
ErJab

1
Hãy đánh dấu ở trên là câu trả lời.
Greg Annandale

1
Sau 4 năm câu trả lời này vẫn còn chân. Cảm ơn vì đã giúp Matt trong một đêm giáng sinh.
Joe

7

Để thay đổi tên máy chủ rsyslog gửi, hãy thêm lệnh sau dưới dạng dòng đầu tiên trong /etc/rsyslog.conf trước khi bất kỳ mô-đun nào được tải:

$LocalHostName yourhostname

Ngoài ra, để gửi rsyslog với tên miền đủ điều kiện (FQDN, chẳng hạn như system1.example.com) thay vì chỉ đơn giản là tên máy chủ (system1), hãy sử dụng lệnh:

$PreserveFQDN on

Điều này hiếm khi cần thiết. Chúng tôi khuyên bạn nên sử dụng tên máy chủ (không có tên miền) trừ khi bạn có hệ thống được đặt tên giống hệt.

Một cách khác để đặt nó (cho phép bạn gửi các bản ghi khác nhau dưới dạng tên máy chủ khác nhau) bằng cách đặt một mẫu tùy chỉnh:

$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate

4

Nó có thể là một lỗi. Hỗ trợ FQDN được biết đến là có ích , mặc dù không có lỗi FQDN nào được đăng ký dường như được áp dụng.

Như một giải pháp thay thế, nếu bạn không thực hiện bất kỳ chuyển tiếp nào, hãy sử dụng %FROMHOST%thay vì% HOSTNAME%.


1
Việc sử dụng %FROMHOST%mang lại cho tôi một FQDN, nhưng dường như đó là kết quả của việc tra cứu ngược lại trên địa chỉ IP của nút máy khách. Vì các hệ thống của tôi đang chạy trên AWS EC2, thật không may, điều này sẽ luôn mang lại một FQDN không có ý nghĩa ngay lập tức với tôi.
cwjohnston

0

Tôi chỉ có thể nói chuyện với 7.6.x, nhưng đó $PreserveFQDNlà tất cả những gì cần thiết để nó hoạt động. Bạn có thể tránh phải làm phiền /etc/hostsnếu FQDN của nút được thiết lập chính xác.

Ví dụ cho các hệ thống CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

# To this
HOSTNAME=service-a-1.sn1.vpc3.example.com

Hãy chắc chắn để khởi động lại.


0

Bạn có thể sử dụng điều này trong cấu hình rsyslog phía máy khách.

$LocalHostName {{HOSTNAME}}

và thay thế {{HOSTNAME}}bằng tên máy chủ mong muốn hoặc bạn có thể phát hiện ra nó trên mỗi máy khách bằng cách sử dụng ria mép .

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.