Chúng tôi là bạn của ELK và Exchange. Phần 1

Chúng tôi là bạn của ELK và Exchange. Phần 1

Tôi đang bắt đầu một loạt bài viết mà tôi muốn chia sẻ trải nghiệm của mình khi kết nối Exchange và ELK. Ngăn xếp này sẽ giúp chúng tôi xử lý khối lượng lớn nhật ký và không phải băn khoăn về kích thước mà các công cụ ghi nhật ký thông thường sẽ từ chối trợ giúp chúng tôi. Hãy làm quen với máy bay chiến đấu khúc gỗ mới.

Exchange có một hệ thống ghi nhật ký khá rộng rãi. Nhật ký phổ biến nhất là nhật ký theo dõi, theo dõi từng bước chuyển của một bức thư cụ thể trong một tổ chức bưu chính; nhật ký máy chủ web, theo dõi từng phiên người dùng mới trong hệ thống và nhật ký của các ứng dụng web cụ thể với mức độ chi tiết phiên khác nhau. Exchange cũng có thể lưu trữ nhật ký thô của giao thức smtp, imap và pop3.

Chúng ta có thể sử dụng công cụ nào để làm việc với nhật ký:

  • Lệnh ghép ngắn tiêu chuẩn Get-MessageTrackingLog: xử lý nhật ký theo dõi một cách thuận tiện;
  • Tiện ích logparser: để ghi nhật ký, sử dụng ngôn ngữ tìm kiếm giả SQL và hoạt động khá nhanh;
  • Máy chủ SQL bên ngoài: dành cho các trường hợp rất cụ thể (ví dụ: phân tích dữ liệu trong thời gian dài).

Tất cả điều này hoạt động tốt khi chúng tôi có một vài máy chủ và khối lượng nhật ký được xử lý được đo bằng hàng chục hoặc hàng trăm gigabyte. Nhưng điều gì sẽ xảy ra nếu số lượng máy chủ lên tới hàng chục và kích thước của nhật ký vượt quá một terabyte? Kế hoạch này rất có thể đang bắt đầu sụp đổ.

Và đây là những gì sẽ xảy ra: Get-MessageTrackingLog bắt đầu hết thời gian chờ, trình phân tích cú pháp đạt đến mức tối đa của kiến ​​trúc 32-bit và quá trình tải lên máy chủ SQL bị hỏng vào thời điểm không thích hợp nhất mà không xử lý được ngoại lệ nhiều dòng từ dịch vụ.

Tại đây, một người chơi mới tham gia - ngăn xếp ELK, được thiết kế đặc biệt để xử lý khối lượng nhật ký khổng lồ trong thời gian hợp lý và với mức tiêu thụ tài nguyên có thể chấp nhận được.

Ở phần đầu tiên tôi sẽ kể chi tiết cho bạn, cách kết nối filebeat thuộc một phần của ngăn xếp ELK — chịu trách nhiệm đọc và gửi các tệp văn bản đơn giản để các ứng dụng khác nhau ghi nhật ký của chúng vào đó. Trong các bài viết sau chúng ta sẽ xem xét kỹ hơn về các thành phần Logstash và Kibana.

Cài đặt

Vì vậy, tập tin lưu trữ tác nhân filebeat có thể được tải về từ trang web này.

Chúng tôi sẽ hoàn tất quá trình cài đặt bằng cách giải nén nội dung của tệp zip. Ví dụ, trong c:Program Filesfilebeat. Sau đó, bạn cần chạy tập lệnh PowerShell install-service-filebeat.ps1, đi kèm với bộ công cụ, để cài đặt dịch vụ filebeat.

Bây giờ chúng ta đã sẵn sàng để bắt đầu thiết lập file cấu hình.

khả năng chịu lỗi

Filebeat đảm bảo gửi nhật ký đến hệ thống thu thập nhật ký. Điều này đạt được bằng cách duy trì sổ đăng ký các mục trong tệp nhật ký. Cơ quan đăng ký lưu trữ thông tin về những bản ghi đã được đọc từ tệp nhật ký và đánh dấu các bản ghi cụ thể có thể được chuyển đến đích.

Nếu một bản ghi không thể được gửi đi, filebeat sẽ cố gắng gửi lại nó cho đến khi nhận được xác nhận gửi từ hệ thống nhận hoặc tệp nhật ký gốc bị xóa trong quá trình quay vòng.

Khi dịch vụ được khởi động lại, filebeat sẽ đọc thông tin từ sổ đăng ký về các bản ghi cuối cùng được đọc và gửi, đồng thời sẽ đọc các bản ghi trong tệp nhật ký dựa trên thông tin trong sổ đăng ký.

Điều này cho phép bạn giảm thiểu nguy cơ mất thông tin nhật ký cần được gửi đến máy chủ elasticlogstash trong các lỗi không mong muốn và hoạt động bảo trì máy chủ.

Bạn có thể tìm hiểu thêm về điều này đọc tài liệu trong đoạn văn: Filebeat giữ trạng thái của tệp như thế nào và Filebeat đảm bảo phân phối ít nhất một lần như thế nào?

điều chỉnh

Tất cả cấu hình được thực hiện trong tệp cấu hình định dạng yml, được chia thành nhiều phần. Chúng ta hãy xem xét một số trong số chúng có liên quan đến quá trình thu thập nhật ký từ máy chủ Exchange.

Khối xử lý nhật ký

Khối xử lý nhật ký bắt đầu bằng trường:

filebeat.inputs:

Chúng tôi sẽ sử dụng một công cụ thu thập nhật ký phổ biến:

- type: log

Tiếp theo, cho biết trạng thái (đã bật) và đường dẫn đến thư mục có nhật ký. Ví dụ: trong trường hợp nhật ký IIS, cài đặt có thể như sau:

    enabled: true
    paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log

Một cài đặt quan trọng khác là cách filebeat đọc các bản ghi nhiều dòng. Theo mặc định, filebeat coi một dòng của tệp nhật ký là một mục nhập. Điều này hoạt động tốt cho đến khi chúng tôi bắt đầu nhận được các ngoại lệ trong nhật ký của mình liên quan đến hoạt động không chính xác của dịch vụ. Trong trường hợp này, các ngoại lệ có thể bao gồm một số dòng. Do đó, filebeat phải tính mục nhập nhiều dòng là một nếu dòng tiếp theo bắt đầu bằng ngày. Định dạng ghi nhật ký trong Exchange như sau: mỗi mục nhập mới trong tệp nhật ký bắt đầu bằng một ngày. Trong cấu hình, tình trạng này trông như thế này:

multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after

Sẽ rất hợp lý khi thêm thẻ vào bài đăng bạn đang gửi, ví dụ:

  tags: ['IIS', 'ex-srv1']

Và đừng quên loại trừ khỏi các dòng xử lý bắt đầu bằng ký tự băm:

  exclude_lines: ['^#']

Vì vậy, khối đọc nhật ký sẽ trông như thế này:

filebeat.inputs:
- type: log
  enabled: true
  paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log
  multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']

Khối gửi nhật ký

Filebeat gửi các mục riêng lẻ trong tệp nhật ký dưới dạng đối tượng json, trong đó một mục nhập cụ thể từ nhật ký được chứa trong một trường thông báo. Nếu chúng ta muốn bằng cách nào đó làm việc với thông tin này, trước tiên chúng ta cần phân tích trường này thành các trường riêng biệt. Điều này có thể được thực hiện, ví dụ, trong logstash. Anh ta sẽ là người nhận các bản ghi từ filebeat. Đây là những gì nó có thể trông giống như trong tệp cấu hình filebeat:

output.logstash:
  hosts: ["logstash1.domain.com:5044"]

Nếu có một số máy chủ thì bạn có thể kích hoạt cân bằng cho chúng: khi đó filebeat sẽ không gửi nhật ký đến máy chủ có sẵn đầu tiên trong danh sách, nhưng sẽ phân phối nhật ký đã gửi giữa một số máy chủ:

hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 

Filebeat, khi xử lý nhật ký vào json đã gửi, ngoài mục nhập nhật ký có trong trường thông báo, sẽ thêm một lượng siêu dữ liệu nhất định, điều này ảnh hưởng đến kích thước của tài liệu cuối cùng ở dạng đàn hồi. Siêu dữ liệu này có thể được loại bỏ có chọn lọc khỏi bài gửi. Điều này được thực hiện trong khối bộ xử lý bằng cách sử dụng bộ xử lý drop_fields. Ví dụ: bạn có thể loại trừ các trường sau:

processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]

Bạn nên tiếp cận việc lựa chọn các trường bị loại trừ một cách cẩn thận, vì một số trường trong số đó có thể được sử dụng một cách linh hoạt để xây dựng chỉ mục.

Vì vậy, khối gửi nhật ký sẽ trông như thế này:

output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]

cài đặt ghi nhật ký filebeat

Sẽ rất hợp lý khi đặt các cài đặt ghi nhật ký sau:

  • Thông tin cấp độ ghi nhật ký;
  • Chúng tôi ghi nhật ký vào các tệp được đặt theo mặc định (thư mục nhật ký, trong thư mục cài đặt filebeat);
  • Tên tệp nhật ký - filebeat;
  • Lưu trữ 10 tệp nhật ký gần đây nhất;
  • Bắt đầu quay khi kích thước đạt 1MB.

Khối cấu hình ghi nhật ký cuối cùng sẽ trông như thế này:

logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

Cấu hình cuối cùng

Chúng tôi đã tập hợp cấu hình và bây giờ nó trông như thế này:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:inetpublogsLogFilesW3SVC1*.log
    - C:inetpublogsLogFilesW3SVC2*.log
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']
 
output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
    fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
 
logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

Điều quan trọng là phải hiểu rằng định dạng tệp cấu hình là yml. Vì vậy, điều quan trọng là phải đặt dấu cách và dấu trừ một cách chính xác.

Filebeat có thể kiểm tra tệp cấu hình và nếu cú ​​pháp có lỗi, nó sẽ cho biết dòng nào và vị trí nào trong dòng có cú pháp sai. Việc kiểm tra được thực hiện như sau:

.filebeat.exe test config

Filebeat cũng có thể kiểm tra tính khả dụng của mạng của bộ thu nhật ký. Việc kiểm tra bắt đầu như thế này:

.filebeat.exe test output

Trong các phần sau tôi sẽ nói về sự kết nối và tình bạn của Exchange với các thành phần Logstash và Kibana.

Liên kết hữu ích

Nguồn: www.habr.com