---
id: central-graylog
title: "Graylog"
shortTitle: "Graylog"
track: central-logs
trackTitle: "Log tập trung"
order: 3
level: important
status: published
estimatedMinutes: 30
prerequisites:
  - central-loki
next: central-splunk
reviewedAgainst: 2026-10-12
sources:
  - title: "The Graylog stack"
    url: https://go2docs.graylog.org/current/planning_your_deployment/the_graylog_stack.htm
  - title: "GELF"
    url: https://go2docs.graylog.org/current/getting_in_log_data/gelf.html
---

# Graylog

Graylog nhận log, phân luồng bằng stream, và search trên một search backend. Bản hiện tại khuyên dùng Data Node làm backend. OpenSearch tự quản lý vẫn được hỗ trợ nếu nằm trong ma trận tương thích; Elasticsearch 8 và OpenSearch 3 thì không. Bài này không dựng stack.

## Để làm gì

Bạn sẽ đọc được một message GELF, hiểu input là cửa nhận log của Graylog, và không dựng thêm Graylog chỉ vì đã học xong bài Elastic.

## Gồm những gì

- Input, message, stream.
- GELF là một cách gửi log, không phải cách duy nhất.
- Data Node là backend được tài liệu hiện tại khuyên dùng. Nếu tự cài OpenSearch, phiên bản phải nằm trong dải được hỗ trợ.

Bài không có Docker Compose cho cả bộ Graylog, MongoDB và OpenSearch.

## Dùng khi nào

Đội của bạn đã chạy Graylog, và bạn cần gửi log từ một app vào đúng input. Nếu lab đã có Elastic và Loki, đừng cài thêm Graylog lên máy học.

## Kiến thức cốt lõi

Input là một listener: GELF TCP, syslog hoặc Beats, tùy input nào đang bật. Message vào qua input, rồi đi qua pipeline và stream. Stream gom message theo luật, để phân quyền người xem và đặt retention khác nhau cho từng nhóm. Nếu không có stream, message vẫn nằm ở nơi mặc định, và nơi đó thường rộng hơn mức một team nên được xem.

GELF là JSON có các field `version`, `host`, `short_message`. `short_message` là nội dung ngắn của log. Theo spec GELF mà Graylog dẫn, field bổ sung phải có tiền tố `_`. Nếu message thiếu `short_message`, input sẽ từ chối hoặc bỏ qua message đó.

MongoDB không phải search backend. MongoDB chỉ giữ cấu hình và metadata của Graylog, còn log nằm ở Data Node hoặc OpenSearch. Trang mô tả stack của Graylog khuyên dùng Data Node và cảnh báo rằng OpenSearch 3 không được hỗ trợ. Vì vậy đừng nâng cấp OpenSearch theo một bài blog bên ngoài.

## Lệnh và code mẫu

Một message hợp lệ để đọc, không gửi đi:

```json
{
  "version": "1.1",
  "host": "lab",
  "short_message": "payment timeout",
  "_service": "api"
}
```

Chỉ khi bạn đã có sẵn một Graylog lab và input GELF HTTP đang mở trên localhost, lúc đó mới thử POST message này. Không có thì dừng ở bước đọc.

## Thực hành

1. Chỉ ra field nào là nội dung cho người đọc.
2. Chỉ ra field nào là field bổ sung.
3. Không pull image Graylog.

## Kết quả mong đợi

`short_message` là nội dung log, `_service` là field bổ sung. Máy bạn không có thêm stack nào.

## Checklist

- [ ] Input trên production không mở ra Internet nếu không có xác thực.
- [ ] Không nâng OpenSearch lên bản 3 chỉ vì một bài viết bên ngoài.
- [ ] Stream tách log theo team, không để ai cũng xem được mọi message.

## Lỗi thường gặp

**Gửi log vào cổng syslog trong khi input đang nghe GELF.** Message thành rác hoặc bị bỏ. Hãy xem loại input và cổng trên trang Inputs trước khi sửa app.

**Tìm log trong MongoDB.** MongoDB không chứa nội dung log. Hãy tìm bằng chức năng search của Graylog.

## Nguồn

1. [The Graylog stack](https://go2docs.graylog.org/current/planning_your_deployment/the_graylog_stack.htm) — Data Node và cảnh báo OpenSearch.
2. [GELF](https://go2docs.graylog.org/current/getting_in_log_data/gelf.html) — field bắt buộc khi gửi.

## Tiếp theo

[Splunk](./04-splunk.md)
