---
id: central-splunk
title: "Splunk"
shortTitle: "Splunk"
track: central-logs
trackTitle: "Log tập trung"
order: 4
level: important
status: published
estimatedMinutes: 30
prerequisites:
  - central-graylog
next: case-502
reviewedAgainst: 2026-10-12
sources:
  - title: "About Splunk"
    url: https://docs.splunk.com/Documentation/Splunk/latest/Overview/AboutSplunk
  - title: "Search command primer"
    url: https://docs.splunk.com/Documentation/Splunk/latest/Search/Aboutthesearchlanguage
---

# Splunk

Splunk nhận sự kiện, gắn sourcetype cho chúng, và cho bạn search bằng SPL. Đây là bài cuối của track Log tập trung. Bài không cài Splunk, vì ngay cả bản dùng thử cũng là cả một hệ thống riêng, trong khi bạn chỉ cần đọc hiểu một câu query.

## Để làm gì

Bạn sẽ đọc được một câu SPL, tách được index và sourcetype, và không dùng câu đó như thể nó là LogQL hay Kusto.

## Gồm những gì

- Index, source, sourcetype.
- SPL: bắt đầu bằng từ khóa tìm kiếm, rồi dùng `|` để chuyển sang lệnh như `stats`.
- Forwarder là thành phần gửi log; bài chỉ nhắc tên.

Bài không nói về license và không hướng dẫn cài indexer.

## Dùng khi nào

Công ty đã có Splunk, và runbook đưa cho bạn một câu SPL. Đừng dựng Splunk để thay Loki hay Elastic ở các bài trước, vì ba hệ này không dùng chung ngôn ngữ query.

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

Mỗi sự kiện nằm trong một index. `source` thường là đường dẫn file hoặc tên stream. `sourcetype` cho Splunk biết cách diễn giải nội dung, ví dụ `access_combined` cho log web. Nếu sourcetype sai, field `status` sẽ không được tách ra, dù chữ "500" vẫn nằm trong sự kiện.

Câu SPL bắt đầu bằng từ khóa hoặc bằng `index=`. Dấu `|` chuyển kết quả sang lệnh tiếp theo. `stats count by path` đếm số sự kiện theo field `path`. Nếu field đó chưa được trích ra, `by path` sẽ trả về rỗng hoặc một nhóm trống. Khi đó hãy sửa sourcetype hoặc cấu hình trích field, đừng vội kết luận index không có dữ liệu.

Khoảng thời gian nằm ở time picker trên thanh search, không chỉ nằm trong câu query. Câu query không giới hạn thời gian vẫn bị time picker cắt bớt. Vì vậy hãy nhìn time picker trước khi kết luận "đêm qua không có lỗi".

Universal Forwarder gửi log tới indexer, nên app không nhất thiết phải ghi thẳng vào Splunk. Nếu đội đang dùng HTTP Event Collector, đừng để token HEC trong repo.

## Lệnh và code mẫu

Câu dưới đây chỉ để đọc:

```text
index=app sourcetype=access_combined status=500
| stats count by path
```

| Phần | Ý nghĩa |
| --- | --- |
| index | `app` |
| sourcetype | `access_combined` |
| điều kiện | status 500 |
| lệnh sau dấu `|` | đếm theo `path` |

## Thực hành

1. Điền bảng trên.
2. Kể tên một ngôn ngữ không chạy được câu này, ví dụ LogQL của Loki.
3. Không tải Splunk và không dán token nào.

## Kết quả mong đợi

Bạn điền đúng bốn ô. Bài tiếp theo chuyển sang track Tình huống vận hành, bắt đầu bằng sự cố 502 sau deploy.

## Checklist

- [ ] Query luôn có index; trên hệ lớn, đừng để mặc định search mọi index.
- [ ] Nhìn time picker cùng lúc với câu SPL.
- [ ] Token gửi log không nằm trong Git.

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

**`status=500` không ra kết quả, trong khi raw event có chữ 500.** Nguyên nhân là sourcetype chưa tách field. Hãy tìm `" 500 "` trong raw event để xác nhận sự kiện có tồn tại, rồi sửa sourcetype. Đừng chuyển sang kiểu tìm chuỗi thô mãi mãi.

**Một file nhận hai sourcetype khác nhau.** Field lúc có lúc không. Mỗi nguồn chỉ nên có một sourcetype.

## Nguồn

1. [About Splunk](https://docs.splunk.com/Documentation/Splunk/latest/Overview/AboutSplunk) — indexer, forwarder, search.
2. [About the search language](https://docs.splunk.com/Documentation/Splunk/latest/Search/Aboutthesearchlanguage) — SPL và dấu `|`.

## Tiếp theo

[API trả 502 sau deploy](../cases/01-502.md)
