Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

DevOps đốt tiền infra tập 1


Chết cha rồi, mới nhận được budget alert cost VPC tăng vc, tự nhiên đẻ đâu ra tiền phí Public IPv4 Charge đột biến luôn, không biết từ đâu ra

Xong phim rồi anh, bên FinOps team mới báo data transfer cost trên con VM Google tăng đột biến, SecOps team điều tra phát hiện con VM đang đẩy lượng dữ liệu khổng lồ ra internet

Cost RDS tháng này nhẩy như giá vàng sếp ơi, có mỗi con instance RDS, không autoscaling, lượng requests cũng chả có gì, ko hiểu sao lại cost lại vọt

Đây là vài tính huống thực sự đã xảy ra khi quản lý hạ tầng trên cloud, những sai lầm trong manage hệ thống cloud đều phải trả giá đắt bằng tiền… công ty. Tất nhiên mấy ông SRE DevOps quản lý hạ tầng thì cũng lãnh đủ, bị sếp chửi, cắt performance, viết bản kiểm điểm blo bla.
Một số công ty tập đoàn lớn, hệ thống cỡ bự, họ sẽ build 1 team riêng gọi là FinOps chuyên lo tối ưu hoá hệ thống, cost optimization. Một team SecOps ngồi scan, detect security issue. Đội COE (Cloud of Excellence) manage cloud infra. Còn công ty startup, hệ thống nhỏ nhỏ, một team 2 3 ông DevOps sẽ phải kiêm tất

Back lại mấy tính huống trên


Tình huống 1

Chết cha rồi, mới nhận được budget alert cost VPC tăng vc, tự nhiên đẻ đâu ra tiền phí Public IPv4 Charge đột biến luôn, không biết từ đâu ra
Cái này là nguồn gốc là từ thánh AWS, khi từ 1-Feb-2024,
A charge of $0.005 per IP per hour for all public IPv4 addresses, whether attached to a service or not

Đại loại cứ allocate IP public là phệt tiền liền.
Hệ thống cloud của công ty X sử dụng một loại các ECS task scheduler, mấy cái task này chạy scheduler 30 phút một để monitor các EC2, ssh vào ec2, thực hiện các tác vụ checking app, disk etc, business logic trên server… auto-restart server . Công việc trên được scripting bằng bash
Một lần ECS task instance chạy, nó consume IP public address, khi setting này assignPublicIp được bật
AssignPublicIp: String

Sau khi ECS task chạy xong, IP address sẽ được release, ví dụ ECS chạy trong 1 hours, AWS sẽ phệt 0.005$, nhân với số lượng task instance lên mà quy ra thóc
Thông thường 1 ECS task instance khi chạy các tác vụ như trên mất độ hơn 15 phút, xong là release, một ngày chạy 24 * 2 lần * 1/4 hours * 0.005 $ thì cũng muỗi đốt inoc
Nhưng đó là trường hợp Task chạy ok, ko có lỗi bug. Còn trong trường hợp này, một bug trong code dẫn tới ECS task rơi vào infinitive loops, khiến task chạy không dừng lại được, public IP không được release. Và cứ theo scheduler, ECS lại launch tiếp 1 instances task, một public IP nữa được consume và lại không dừng, IP ko release được

Kết cục thế nào cũng rõ, AWS vớ được con gà béo, charge tiền nhiệt tình, giá bill tăng x10, accountant check bill báo cáo lên COO, COO lôi đầu SRE lead ra vả, đội DevOps bắt đầu check explore điều tra truy vết và phát hiện ra bug code đã không handle được hết case server gặp lỗi để xử lý làm ECS task rơi vào trạng thái treo
Tuy nhiên ô SRE lead vớ được cái link https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/ như bắt được vàng, liền open case support cho AWS theo kiểu rạch mặt ăn vạ


Ối giời ơi, chúng mày bắt đầu thu tiền mà không có notify, post mỗi cái blog này thì bố tao cũng không biết
Ui anh ơi, anh tha cho em , em không biết thì không có tội, em nào biết, em nào có haytại thằng Dev của em nó code bugs
Than khóc, hù dạo các kiểu, còn AWS thì kiểu
Thôi thôi, tao bỏ qua cho mày cái bill này, lần này kiểm điểm và rút kinh nghiệm sâu sắc

Tính huống 2

Ngoài mấy khoản tính tiền resources theo thời gian như trên thì hệ thống cloud nó cũng phệt một khoản tiền gọi là Data Outbound cost tính theo GB. Đại loại anh launch một con EC2 g4n.4xlarge, ngoài tính phí theo giờ x price, nếu con EC2 này đẩy data ra ngoài, kiểu như EC2 chạy cái script upload data lên storage hay đâu đó qua đường public thì AWS provider sẽ phệt luôn
Công ty ABC, chuyên cung cấp dịch vụ analyze audio call, dùng AI để phân tích nội dung audio call để xem audio call nói về chuyện gì, tâm sự tình yêu hay chửi nhau, vui buồn các kiểu. Nội dung phân tích output ra Json, data parse được lưu vào DB để đội Data analysis phân tích
Audio file được lưu tạm trong server để AI phân tích xử lý dữ liệu, xong sẽ được upload vào storage qua private endpoint. Vì là internal nên không mất phí data outbound. Dung lượng audio file tầm 2M-3Mb/files nhưng số lượng cả trăm K, size phải hàng TB
Cuộc đời vẫn đẹp cho tới một ngày
Xong phim rồi anh, bên FinOps team mới báo data transfer cost trên con EC2 tăng đột biến, SecOps team điều tra phát hiện con VM đang đẩy lượng dữ liệu khổng lồ ra internet
What the fuck?? đẩy data gì đó?
Đang phân tích ạ, nhưng thấy đẩy hàng TB ra ngoàigiờ tracking thấy vẫn tiếp tục đẩy
Chết cha, server bị hack cài spy rồi, con spy nó lấy audio push ra ngoài
Isolated server lại ngay để xử lý

Công ty XYZ, build hệ thống trên K8s, autoscaling trên hơn 100 nodes, hàng ngày các team chạy test sẽ run Jenkins pipeline để build một con pod temporary trên k8s, test xong thì pod tự động terminate, mất độ 1hour để chạy xong test . Một ngày sơ sơ phải vài chục pod được launch lên rồi chạy rồi terminate
Có chuyện lớn rồi, bên team khách hàng báo phát hiện một VM nodes GKE data transfer cost tăng vượt quá Threshold, hệ thống cost alert của họ vừa cảnh báo. Con VM này thuộc quyền quản lý của team mình.
Cost hiện tại đã lên tới 300K USD, yêu cầu phía Fxx điều tra và giải trình gấp ngay trong hôm nay
Con Node này nó đẩy logs ra anh ơi, mà đẩy qua đường internet, nên Google nó charge outbound cost
Đẩy éo gì mà lắm thế, vài chục con pod thôi mà
Ối anh, không phải vài chục, gần 1K con pod được launch lận, mà nó chạy kiểu gì từ sáng hôm qua đến giờ không bị destroy luôn
Thôi xong rồi, từng này con pod chạy từng đó thời gian thì container logs cứ gọi là vãi ái rồi
Hệ thống GKE trên Google generate container logs, logs này thì đủ loại ngoài application logs ra còn có Kubernetes Cluster logs, GKE Node Pool logs, rồi logs Debug, log info, tả pì lù. lưu trong Gcloud storage để phân tích

Log này được view trên GKE log explores, mặc dù là text nhưng đừng coi thường lượng log này, vì size logs có thể lên tới cả TB đối với hệ thống lớn. Và GKE sẽ tính phí storage và transfer. Thường thì SRE team đều setup log rotations độ 7 ngày 1 tháng … tuỳ mục đích để giảm chi phí
Trên mỗi node, GKE logging agent installed để collect logs từ node rồi đẩy tới storage, nếu cùng zone thì free nhưng cross-zone hay cross-region thì sẽ bị phệt , còn khác regions cost cứ x2 lên
Một lần nữa issue đến từ code, các temporary pod được launch bằng code groovy chạy trên Jenkins, một bug trong code khi những con pod này không terminate được khi chạy xong code, nó rơi vào trạng thái infinitity loops và thể là cứ bắn logs ầm ầm
Các team khác thì vẫn vô tư run jobs tạo pod để test, đúng ngày cao điểm, số lượng pod lên tới cả nghìn và vô tư sút logs
Thế là data outbound = Số pod * lượng logs * thời gian
Kết cục
Chết mẹ 300K$, bằng mợ cái chung cư cao cấp Hà Nội rồi, có bán nhà mà đền

Đăng nhận xét

0 Nhận xét