Giới Thiệu
Trong thời đại tiền điện tử phát triển mạnh mẽ như hiện nay, việc theo dõi biến động giá của các đồng tiền kỹ thuật số là vô cùng cần thiết. Gần đây, mình rất quan tâm đến việc theo dõi giá của đồng USDT trên sàn giao dịch Binance và đặc biệt là tỷ giá của nó so với VNĐ. Tuy nhiên, sau khi tìm kiếm trên nhiều trang web, mình nhận thấy không có trang nào cung cấp thông tin đúng và đủ theo nhu cầu của mình:
- Theo dõi tỷ giá bán với giao dịch tối thiểu từ 10.000.000 VNĐ
- Loại bỏ những giá quảng cáo không chính xác thường xuất hiện ở đầu Google
Vì vậy, mình đã quyết định tự xây dựng hệ thống để lưu trữ và theo dõi lịch sử tỷ giá cặp USDT/VND này. Trong bài viết này, mình sẽ chia sẻ quá trình xây dựng hệ thống này, bao gồm các thành phần chính là:
- Scraper (Python): Dùng để thu thập dữ liệu trực tiếp từ trang Binance.
- Prometheus: Hệ thống lưu trữ dữ liệu lịch sử tỷ giá trong thời gian dài.
- Grafana: Công cụ phổ biến để trực quan hóa dữ liệu qua biểu đồ.
Phần 1: Scraper (Python)
Để bắt đầu, mình sẽ phát triển một ứng dụng web nhỏ trong Python để cào dữ liệu tỷ giá từ trang P2P của Binance. Mỗi 10 phút một lần, ứng dụng này sẽ lấy ba mức giá gần nhất và tính trung bình, giúp giảm thiểu sự chênh lệch với giá thực tế. Dưới đây là mã nguồn cho ứng dụng:
python
from flask import Flask, jsonify
import requests
import json
import threading
app = Flask(__name__)
# Khởi tạo biến global
usdtvnd = 0
def update_usdt_vnd():
global usdtvnd
headers = {
'Accept': '*/*',
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0'
}
data = {
"fiat": "VND",
"page": 1,
"rows": 3,
"tradeType": "SELL",
"asset": "USDT",
"countries": ["VN"],
"transAmount": 10000000
}
url = 'https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search'
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
# Phân tích dữ liệu JSON
data = json.loads(response.text)
prices = [float(item["adv"]["price"]) for item in data["data"]]
usdtvnd = round(sum(prices) / len(prices), 0)
except requests.exceptions.RequestException as e:
print(f"Error fetching data: {e}")
threading.Timer(600, update_usdt_vnd).start()
# Khởi động đầu tiên
update_usdt_vnd()
@app.route('/')
def get_average_price():
return jsonify({'USDT/VND': int(usdtvnd)})
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Truy cập vào địa chỉ http://localhost:5000
bạn sẽ nhận được giá trị hiện tại dạng {'USDT/VND': 25100}
.
Tiếp theo, chúng ta sẽ tích hợp Prometheus để có thể lưu trữ dữ liệu này. Sử dụng thư viện prometheus_client
, chúng ta sẽ sửa đổi mã nguồn như sau:
python
from prometheus_client import start_http_server, Gauge, generate_latest
# Khởi tạo metrics cho Prometheus
usdt_vnd_gauge = Gauge('usdt_vnd', 'Tỷ giá USDT sang VND')
def update_usdt_vnd():
global usdtvnd
# (Giữ nguyên logic cào dữ liệu)
usdt_vnd_gauge.set(usdtvnd) # Cập nhật giá trị cho metric
Sau khi chạy lại mã nguồn, bạn có thể truy cập vào http://localhost:5000/metrics
để thấy dữ liệu metric đã được hiển thị thành công.
Phần 2: Thiết lập Prometheus
Tiếp theo, chúng ta sẽ thiết lập Prometheus để thu thập các metric mà chúng ta vừa tạo. Mở Terminal và tạo một file prometheus.yml
với nội dung như sau:
yaml
global:
scrape_interval: 300s # Tần suất quét
scrape_configs:
- job_name: 'usdt-metrics'
static_configs:
- targets: ['localhost:5000']
Khởi động Prometheus thông qua Docker với lệnh sau:
bash
docker run -d --name prometheus -p 9090:9090 -v ./prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Kiểm tra bằng cách truy cập http://localhost:9090/
và vào mục Status => Targets để thấy rằng service đang hoạt động tốt.
Phần 3: Thiết lập Grafana
Cuối cùng, chúng ta sẽ sử dụng Grafana để trực quan hóa dữ liệu mà Prometheus đã thu thập. Khởi động Grafana với lệnh:
bash
docker run -d --name grafana -p 3000:3000 grafana/grafana
Truy cập vào Grafana và thêm một Data Source cho Prometheus. Sau khi cấu hình thành công, bạn có thể tạo một Dashboard mới để vẽ biểu đồ cho metric usdt_vnd
.
Kết Luận
Bài viết trên đây đã hướng dẫn bạn cách xây dựng một hệ thống đơn giản để theo dõi tỷ giá USDT/VND bằng Prometheus và Grafana. Với hệ thống này, bạn có thể dễ dàng theo dõi biến động tỷ giá và có được thông tin cần thiết cho đầu tư của mình. Hy vọng bài viết đã mang lại cho bạn nhiều thông tin hữu ích. Nếu bạn thấy bài viết hay, đừng quên nhấn Upvote và theo dõi để nhận thêm nhiều bài viết khác nhé! Chúc bạn một ngày tốt lành!
Liên Hệ Hỗ Trợ
Nếu bạn cần hỗ trợ về chuyên môn hay hệ thống DevOps, hãy liên hệ với mình tại hoangviet.io.vn.
source: viblo