DevOps – Cảnh báo giám sát

Các đối tượng cần giám sát

STTĐối tượngThông số giám sátTiêu chí giám sátTham khảo 
1ServerCPU
RAM
HDD
Network (bandwidth)
IO
UP/DOWN
Load average
CPU
RAM
HDD
Bandwidth
IO
https://github.com/prometheus/node_exporter
2Docker containerCPU
RAM
HDD
Network (bandwidth)
IO
UP/DOWN
CPU
RAM
HDD
Bandwidth
IO
3URLHttp statusUP(200)/DOWN(5xx)https://github.com/prometheus/blackbox_exporter
4NginxActive connection
Accepts
Handled
Requests
Reading
Writting
Waiting
?https://github.com/vozlt/nginx-module-vts
https://github.com/hnlq715/nginx-vts-exporter
5MySQLUP/DOWN
SQL connections (>75% max_connection)
https://github.com/prometheus/mysqld_exporter
6RedisUP/DOWNhttps://github.com/oliver006/redis_exporter
7RabbitMQUP/DOWN
Tồn queue:
– queue có >100 messages trong 1 phút → YELLOW
– queue có >100 messages trong 5 phút → ORANGE
– queue có >100 mesages trong 10 phút → RED
https://github.com/kbudde/rabbitmq_exporter
8DB ClusterGiám sát đồng bộ dữ liệu giữa các instance?

Các mức cảnh báo

STTMức cảnh báoĐiều kiệnKênh cảnh báo 
1GREENKhi dịch vụ UP & tiêu chí giám sát < 70%N/A
2YELLOWKhi dịch vụ UP & tiêu chí giám sát vượt 70% (vd: ổ cứng đầy quá 70%)Email
3ORANGEKhi dịch vụ UP & tiêu chí giám sát vượt 80%Email, Slack
4REDKhi dịch vụ DOWN hoặc tiêu chí giám sát vượt 90%Email, Slack, SMS

Ghi chú – Cấu hình dung lượng file upload của kubernetes dùng ingress-nginx

Cấu hình cho một ingress bằng cách thêm annotation

nginx.ingress.kubernetes.io/proxy-body-size: 8m

Cấu hình cho toàn bộ các ingress bằng cách cấu hinhx Nginx ConfigMap

proxy-body-size=8m

Cần làm – Ghi hình lại Web RTC

Vấn đề: Giải pháp ghi hình phía server tốn chi phí khi phải chuẩn bị tài nguyên để ghi hình số lượng lớn conference diễn ra đồng thời

Giải pháp: Cho 1 người dùng ảo vào conference trước giờ học X phút. Record lại screen trình duyệt của người dùng ảo. Khi kết thúc đẩy video lên server

  • B1: Viết extension record lại screen của trình duyệt khi người dùng truy cập domain trong danh sách cấu hình. Lưu trữ ở local khi conference kết thúc
  • B2: Tích hợp extension –>  viết tiến trình Java
    • B2.1: Nhận message từ queue để join 1 conference
    • B2.2: Bật trình duyệt vào lớp với role là ROBOT → không public video/audio
    • B2.3: Extension record lại screen, lưu trữ vào địa chỉ cấu hình trước
    • B2.4: Hết conference kiểm tra xem file record có tồn tại chưa? Nếu chưa 10s check 1 lần. Nếu tồn tại rồi upload file lên server, đóng trình duyệt
  • B3: Triển khai thử nghiệm trên các máy PC khi vận hành lớp học
  • B4: Triển khai đại trà bằng cách tự động bật EC2 của AWS, start tiến trình Java và thực hện các bước #2
  • B5: Nâng cấp để có thể record được cả video của từng thành viên chứ không chỉ screen của trình duyệt

DevOps – Log tập trung

STTLoại logTrường cần logNguồn
1Application logservice (eg: topkid-feedback-prod)
timestamp
message
log_level (eg: ERROR)
kafkaapp-*
2NGINX ingress access log@timestamp
client_ip
docker.container_id
http_host
http_method
http_path
http_referer
http_user_agent
request_time
status
upstream_addr
upstream_connect_time
upstream_header_time
upstream_response_time
upstream_status
user_id
user_name
user_role
app_os
app_uuid
app_version
?ingress-access*
3NGINX ingress error log@timestamp
docker.container_id
host
log_level
message
?ingress-error*
4MYSQL slow logtimestamp (start_time)

query_db
query_host
query_ip
query_lock_time
query_rows_affected
query_rows_examined
query_rows_sent
query_sql
query_time
query_user
rsyslogmysql_slow-*
5MYSQL error logtimestamp
sysloghost
loglevel
message
rsyslogmysql-*
6Server AUTH logsysloghost
timestamp
message
ssh_authmethod
ssh_authresult
ssh_client_ip
ssh_protocol
ssh_user
?auth-*
7Server COMMAND logsysloghost
timestamp
message
user
command
procid
programname
?command-*
8Server FIREWALL logsysloghost
timestamp
ufw_action
ufw_dest_ip
ufw_dst_port
ufw_interface
ufw_mac
ufw_out_interface
ufw_protocol
ufw_src_ip
ufw_src_port
ufw_tcp_opts
message
/var/log/ufw.logfirewall-*
9Server logsysloghost
timestamp
message
log_level
procid
programname
/var/log/message
/var/log/syslog
rsyslog-*
@timestamp trên ELK là thời gian trong message log chứ không phải thời gian insert vào ELK

Cần làm – Kiểm tra cấu hình server tự động

Vấn đề: Khi thêm 1 server mới thì SYS có thể thiếu cấu hình NTP, LOG, SECURITY, ROUTE, …

Giải pháp: Có 1 tool/script để kiểm tra cấu hình xem đã đúng và đủ chưa

Git

Các khái niệm của GIT cần nắm

  • remote repository: kho chứa code ở trên server
  • local repository: kho chứa code trên máy tính người dùng
  • upstream: remote repository gốc
  • origin: remote repository fork từ upstream
  • branch: nhánh
  • fetch: lấy data từ upstream về local repository
  • checkout: chuyển nhánh làm việc
  • merge: hợp nhất các nhánh
  • commit: lưu trữ thay đổi vào local repository
  • push: đẩy thay đổi vào upstream
  • pull request: yêu cầu merge từ branch X1 của repo Y1 vào branch X2 của repo Y2 (ví dụ: merge từ branch “fix-a-bug” của repo “icovn/spring-boot” vào branch “develop” của repo “spring-projects/spring-boot”)

Các bước dev cần làm trước khi thực hiện task

B1: fork branch develop của module cần tác động về origin của dev

B2: clone từ origin về local

git clone git@github.com:icovn/laravel-zipkin.git

B3: cấu hình upstream remote

cd go-strava
git remote add upstream https://github.com/mts88/laravel-zipkin.git

Các bước dev cần thực hiện khi được giao 1 task

B1: Đồng bộ dữ liệu từ upstream repo về origin repo

git fetch origin
git fetch upstream

git checkout develop
git merge upstream/develop
git push

B2: Tạo branch mới bắt đầu bằng id của task trên JIRA

git checkout -b 99-implement-a-feature

B3: Thực hiện code & unit test

B4: commit thay đổi vào local repo

git add .
git commit -m "commit message"

B5: push thay đổi lên upstream

git push origin 99-implement-a-feature

B6: Tạo PULL REQUEST

B7: Chờ PULL REQUEST được review

B8: Lặp lại các bước từ 3-7 (bỏ qua bước 6 khi đã có PULL REQUEST rồi) cho đến khi review ok

Các bước dev cần thực hiện khi đang làm muốn update code mới nhất từ upstream

git fetch origin
git fetch upstream
git checkout develop
#update local
git merge upstream/develop
#update origin
git push
git checkout 99-implement-a-feature
git merge develop