1. GET API
Giới thiệu về API.
Topology
+------------------------------+
| Monitoring Nginx |
| 10.10.16.16 |
| https://ceph-api.stasklab.vn |
+-------------+----------------+
|
GET/POST |
v
+---------------------------------------------------------------+
| Ceph Object Storage HCM04 |
| |
| +------------+ +-----------+ +-----------+ |
| | Mon 1 | | Mon 2 | | Mon 3 | |
| |10.166.23.5 | |10.166.23.6| |10.166.23.7| |
| | TCP/5000 | | TCP/5000 | | TCP/5000 | |
| +------------+ +-----------+ +-----------+ |
| | |
| ssh ubuntu@10.166.23.6 'python3 /etc/ceph_api/scripts.py' |
| | |
| v |
| +------------+ +------------+ +------------+ |
| | OSD 1 | | OSD 2 | | OSD 3 | |
| |10.166.23.21| |10.166.23.22|. |10.166.23.23| |
| | TCP/5000 |. | TCP/5000 | | TCP/5000 | |
| +------------+ +------------+ +------------+ |
+---------------------------------------------------------------+
^
|
Script push event
|
v
+-----+
| SRE |
+-----+
Giải thích:
Monitoring Nginx: nhận các yêu cầuGET/POSTtừ hệ thống Ceph, giao tiếp với API.Mon x: là các node Monitor trong cụm Ceph Object Storage.OSD x: là các Object Storage Daemon - nơi lưu trữ thực tế.SRE: nhận cảnh báo hoặc hành động từ hệ thống Monitoring qua script push.
Đây là nội dung json bên SOC sẽ push về bên SRE để hiển thị lên dashboard.
[
{
"cluster": "<cluster_name>",
"osd_id": "osd.<id>",
"hostname": "<hostname>",
"device_name": "<device_name>",
"log_dmesg": "<số dòng lỗi được tìm thấy>",
"ceph_health": 1,
"log_mon": 1,
"log_osd": 1,
"action": 1,
}
]
Mô tả chi tiết các trường:
- cluster: Tên của cluster Ceph.
- osd_id: ID của OSD gặp lỗi SLOW OPS.
- hostname: Tên node chứa OSD gặp lỗi SLOW OPS.
- log_dmesg: Số lượng lỗi liên quan đến disk chứa OSD gặp sự cố (trong ví dụ là 6 lỗi).
- dmesg_detail: Danh sách chi tiết các log lỗi liên quan đến disk.
- ceph_health: Trạng thái sức khỏe của cluster Ceph:
- Trả về
1nếu trạng thái làHEALTHY_OK. - Trả về
0nếu trạng thái khácHEALTHY_OK.
- Trả về
- log_mon: Trạng thái log SLOW OPS trên Ceph MON:
- Trả về
1nếu có log SLOW OPS liên quan đến OSD ID. - Trả về
0nếu không có log SLOW OPS liên quan.
- Trả về
- log_osd: Trạng thái log SLOW OPS trên node chứa OSD gặp lỗi:
- Trả về
1nếu có log SLOW OPS liên quan đến OSD ID. - Trả về
0nếu không có log SLOW OPS liên quan.
- Trả về
- action: Kết quả xác định có thể thực hiện lệnh
out OSDhay không:- Trả về
1nếu có thể thực hiện lệnhout OSD. - Trả về
0nếu không thể thực hiện lệnhout OSD.
- Trả về
Quy tắc xác định giá trị của action:
- Nếu
log_dmesg = 1: - Trả về
action = 1vì có lỗi phần cứng liên quan đến disk. - Nếu
log_dmesg = 0: - Trả về
action = 1khi cả hai điều kiện sau đều đúng:log_mon = 1vàlog_osd = 1.- Số lượng OSD gặp lỗi SLOW OPS là 1.
- Nếu cluster thông báo có từ 2 OSD trở lên gặp lỗi SLOW OPS, hệ thống sẽ không tự động xử lý mà yêu cầu admin can thiệp thủ công.
Giải thích chi tiết hai kết quả output của API mà SRE sẽ nhận.
1. Ví dụ output với 1 OSD lỗi SLOW OPS được phép action
[
{
"cluster": "LAB",
"osd_id": "osd.8",
"hostname": "CEPH-LAB-OSD-076",
"device_name": "sdd",
"log_dmesg": 6,
"dmesg_detail": [
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): metadata I/O error: block 0x5457b7fc8 (\"xfs_trans_read_buf_map\") error 5 numblks 8"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): writeback error on sector 8975983192"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): metadata I/O error: block 0x3a3958600 (\"xlog_iodone\") error 5 numblks 512"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): xfs_do_force_shutdown(0x2) called from line 1261 of file /build/linux-Qc9Uca/linux-4.15.0/fs/xfs/xfs_log.c.Return address = 0x000000001c3cef2d"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): Log I/O Error Detected.Shutting down filesystem"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): Please umount the filesystem and rectify the problem(s)"
}
],
"ceph_health": 1,
"log_mon": 1,
"log_osd": 1,
"action": 1,
"ceph_health_detail": {
"status": "HEALTH_WARN",
"checks": {
"SLOW_OPS": {
"severity": "HEALTH_WARN",
"summary": {
"message": "2 slow ops, oldest one blocked for 38 sec, osd.8 has slow ops",
"count": 1
},
"detail": [],
"muted": false
}
},
"mutes": []
}
}
]
Giải thích:
- Cluster: Tên cluster là
LAB. - OSD gặp lỗi:
osd.8trên nodeCEPH-LAB-OSD-076, sử dụng thiết bịsdd. - Lỗi phần cứng:
- Có 6 lỗi được ghi nhận trong log hệ thống (
log_dmesg = 6). - Các lỗi này liên quan đến thiết bị
sdd.
- Có 6 lỗi được ghi nhận trong log hệ thống (
- Trạng thái Ceph:
- Cluster Ceph có trạng thái
HEALTH_WARN, với cảnh báo về 2 slow ops, trong đóosd.8là OSD bị ảnh hưởng.
- Cluster Ceph có trạng thái
- Log SLOW OPS:
- Log SLOW OPS được ghi nhận trên cả MON (
log_mon = 1) và OSD (log_osd = 1).
- Log SLOW OPS được ghi nhận trên cả MON (
- Action:
action = 1: Hệ thống xác định rằng OSD này có thể được thực hiện lệnhout OSDđể loại bỏ khỏi cluster.- Quyết định này dựa trên việc có lỗi phần cứng (
log_dmesg > 0), cho thấy thiết bịsddgặp vấn đề nghiêm trọng và cần được xử lý.
2. Ví dụ output với nhiều OSD lỗi SLOW OPS không được phép action
[
{
"cluster": "LAB",
"osd_id": "osd.54",
"hostname": "CEPH-LAB-OSD-076",
"device_name": "sde",
"log_dmesg": 0,
"dmesg_detail": [],
"ceph_health": 1,
"log_mon": 1,
"log_osd": 1,
"action": 0,
"ceph_health_detail": {
"status": "HEALTH_WARN",
"checks": {
"SLOW_OPS": {
"severity": "HEALTH_WARN",
"summary": {
"message": "4 slow ops, oldest one blocked for 41 sec, daemons [osd.54,osd.8] have slow ops.",
"count": 1
},
"detail": [],
"muted": false
}
},
"mutes": []
}
},
{
"cluster": "LAB",
"osd_id": "osd.8",
"hostname": "CEPH-LAB-OSD-076",
"device_name": "sdd",
"log_dmesg": 6,
"dmesg_detail": [
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): metadata I/O error: block 0x5457b7fc8 (\"xfs_trans_read_buf_map\") error 5 numblks 8"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): writeback error on sector 8975983192"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): metadata I/O error: block 0x3a3958600 (\"xlog_iodone\") error 5 numblks 512"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): xfs_do_force_shutdown(0x2) called from line 1261 of file /build/linux-Qc9Uca/linux-4.15.0/fs/xfs/xfs_log.c.Return address = 0x000000001c3cef2d"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): Log I/O Error Detected.Shutting down filesystem"
},
{
"timestamp": "Sat Jan 21 19:18:49 2023",
"message": "XFS (sdd): Please umount the filesystem and rectify the problem(s)"
}
],
"ceph_health": 1,
"log_mon": 1,
"log_osd": 1,
"action": 0,
"ceph_health_detail": {
"status": "HEALTH_WARN",
"checks": {
"SLOW_OPS": {
"severity": "HEALTH_WARN",
"summary": {
"message": "4 slow ops, oldest one blocked for 41 sec, daemons [osd.54,osd.8] have slow ops.",
"count": 1
},
"detail": [],
"muted": false
}
},
"mutes": []
}
}
]
Mô tả:
1. OSD 54 (osd.54)
- Cluster: Tên cluster là
LAB. - OSD gặp lỗi:
osd.54trên nodeCEPH-LAB-OSD-076, sử dụng thiết bịsde. - Lỗi phần cứng (
log_dmesg):- Không có lỗi phần cứng nào được ghi nhận trong log hệ thống (
log_dmesg = 0). - Trường
dmesg_detailtrống, cho thấy không có lỗi liên quan đến thiết bịsde.
- Không có lỗi phần cứng nào được ghi nhận trong log hệ thống (
- Trạng thái Ceph:
- Cluster Ceph có trạng thái
HEALTH_WARN, với cảnh báo về 4 slow ops, trong đóosd.54là một trong các OSD bị ảnh hưởng.
- Cluster Ceph có trạng thái
- Log SLOW OPS:
- Log SLOW OPS được ghi nhận trên cả MON (
log_mon = 1) và OSD (log_osd = 1).
- Log SLOW OPS được ghi nhận trên cả MON (
- Action:
action = 0: Hệ thống xác định rằng OSD này không được phép thực hiện lệnhout OSD.- Quyết định này dựa trên việc không có lỗi phần cứng (
log_dmesg = 0) và có nhiều hơn một OSD bị ảnh hưởng bởi SLOW OPS (cảosd.54vàosd.8).
2. OSD 8 (osd.8)
- Cluster: Tên cluster là
LAB. - OSD gặp lỗi:
osd.8trên nodeCEPH-LAB-OSD-076, sử dụng thiết bịsdd. - Lỗi phần cứng (
log_dmesg):- Có 6 lỗi được ghi nhận trong log hệ thống (
log_dmesg = 6). - Các lỗi này liên quan đến hệ thống file XFS trên thiết bị
sdd, bao gồm lỗi ghi dữ liệu, lỗi metadata, và shutdown hệ thống file.
- Có 6 lỗi được ghi nhận trong log hệ thống (
- Trạng thái Ceph:
- Cluster Ceph có trạng thái
HEALTH_WARN, với cảnh báo về 4 slow ops, trong đóosd.8là một trong các OSD bị ảnh hưởng.
- Cluster Ceph có trạng thái
- Log SLOW OPS:
- Log SLOW OPS được ghi nhận trên cả MON (
log_mon = 1) và OSD (log_osd = 1).
- Log SLOW OPS được ghi nhận trên cả MON (
- Action:
action = 0: Hệ thống xác định rằng OSD này không được phép thực hiện lệnhout OSD.- Quyết định này dựa trên việc có nhiều hơn một OSD bị ảnh hưởng bởi SLOW OPS (cả
osd.54vàosd.8), mặc dùosd.8có lỗi phần cứng.
Tóm tắt so sánh:
| Thuộc tính | OSD 54 (osd.54) | OSD 8 (osd.8) |
|---|---|---|
| Cluster | LAB | LAB |
| OSD ID | osd.54 | osd.8 |
| Hostname | CEPH-LAB-OSD-076 | CEPH-LAB-OSD-076 |
| Thiết bị | sde | sdd |
Lỗi phần cứng (log_dmesg) |
0 | 6 |
| Chi tiết lỗi phần cứng | Không | Có |
| Trạng thái Ceph | HEALTH_WARN | HEALTH_WARN |
Log MON (log_mon) |
1 | 1 |
Log OSD (log_osd) |
1 | 1 |
| Action | 0 (Không được phép out OSD) |
0 (Không được phép out OSD) |
Kết luận:
-
OSD 54 (osd.54):
- Không có lỗi phần cứng, nhưng bị ảnh hưởng bởi SLOW OPS.
- Không được phép thực hiện lệnh
out OSDvì có nhiều hơn một OSD bị ảnh hưởng bởi SLOW OPS.
-
OSD 8 (osd.8):
- Có lỗi phần cứng nghiêm trọng, nhưng vẫn không được phép thực hiện lệnh
out OSDvì có nhiều hơn một OSD bị ảnh hưởng bởi SLOW OPS. - Hệ thống yêu cầu admin kiểm tra và xử lý thủ công để đảm bảo an toàn cho cluster.
- Có lỗi phần cứng nghiêm trọng, nhưng vẫn không được phép thực hiện lệnh
2. POST API
Mô tả.
-
API này tập trung vào việc kiểm tra trạng thái của một OSD (Object Storage Daemon) và thực hiện hành động đánh dấu một OSD là "out". Mục đích chính là để:
- Kiểm tra trạng thái của một OSD.
- Đánh dấu một OSD là "out".
- Trả về phản hồi JSON chuẩn hóa để thông báo kết quả.
-
Các bước thực hiện:
- Xử lý đầu vào: Nhận {osd_id}.
- Xác minh trạng thái OSD: Kiểm tra trạng thái hiện tại của OSD.
- Nếu OSD đã có reweight = 0 (nghĩa là đã "out"), trả về phản hồi thành công với mã HTTP 208 (Already Reported).
- Thực thi lệnh "out": Gọi execute_command để chạy lệnh ceph osd out {osd_id}.
- Nếu lệnh thất bại, trả về lỗi.
- Xác minh lại trạng thái: Gọi lại get_osd_status để đảm bảo OSD đã được đánh dấu là "out".
- Nếu không thành công, trả về lỗi.
- Trả về phản hồi thành công: Nếu mọi bước đều thành công, trả về phản hồi với thông báo OSD đã được đánh dấu là "out".
Cách gọi API
Sử dụng URL http://<url_action_api>/set_osd_out/osd.<id>. Với osd.id theo format osd.1, osd.2,..., ex: https://<url_action_api>/set_osd_out/osd.8
Dưới đây là các ví dụ phản hồi JSON:
1. OSD đã được đánh dấu là "out" trước đó
- Mã trạng thái HTTP:
208 (Already Reported) - Phản hồi JSON:
{
"status": "success",
"message": "OSD 1 is already marked as 'out'.",
"status_code": 208
}
2. Đánh dấu OSD là "out" thành công
- Mã trạng thái HTTP:
200 (OK) - Phản hồi JSON:
{
"status": "success",
"message": "OSD 1 has been successfully marked as 'out'.",
"status_code": 200
}
3. Lỗi khi thực thi lệnh "ceph osd out"
- Mã trạng thái HTTP:
500 (Internal Server Error) - Phản hồi JSON:
{
"status": "failure",
"error": "Error executing command: ceph osd out 1",
"details": "Detailed error message from the command execution.",
"status_code": 500
}
4. Lỗi khi xác minh trạng thái OSD sau khi thực thi lệnh
- Mã trạng thái HTTP:
500 (Internal Server Error) - Phản hồi JSON:
{
"status": "failure",
"error": "OSD 1 is not marked as 'out'.",
"details": "The reweight value is not 0.",
"status_code": 500
}
5. Lỗi khi không tìm thấy OSD trong cluster
- Mã trạng thái HTTP:
500 (Internal Server Error) - Phản hồi JSON:
{
"status": "failure",
"error": "Failed to verify OSD status.",
"details": "OSD not found in the cluster.",
"status_code": 500
}
6. Lỗi khi osd_id không hợp lệ
- Mã trạng thái HTTP:
400 (Bad Request) - Phản hồi JSON:
{
"status": "failure",
"error": "Invalid OSD ID.",
"details": "OSD ID 'abc' is not a valid number.",
"status_code": 400
}
7. Lỗi khi không thể phân tích cú pháp JSON từ lệnh Ceph
- Mã trạng thái HTTP:
500 (Internal Server Error) - Phản hồi JSON:
{
"status": "failure",
"error": "Failed to verify OSD status.",
"details": "Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)",
"status_code": 500
}
8. Lỗi không xác định
- Mã trạng thái HTTP:
500 (Internal Server Error) - Phản hồi JSON:
{
"status": "failure",
"error": "Failed to verify OSD status.",
"details": "Unknown error occurred.",
"status_code": 500
}