> For the complete documentation index, see [llms.txt](https://docs.validator247.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.validator247.com/tenderduty.md).

# Tenderduty

## Bước 1. Cài Tenderduty

Giữ Go hiện có (không cần hạ xuống Go 1.18 nếu máy đang dùng bản mới tương thích).

```
cd $HOME
rm -rf tenderduty
git clone https://github.com/blockpane/tenderduty
cd tenderduty
go install
cp example-config.yml config.yml
```

Tenderduty hỗ trợ dashboard, Prometheus, Telegram, Discord, theo dõi nhiều chain và nhiều loại cảnh báo.&#x20;

***

## Create service

```
sudo tee /etc/systemd/system/tenderdutyd.service > /dev/null <<EOF
[Unit]
Description=Tenderduty Monitoring Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/tenderduty
ExecStart=/root/go/bin/tenderduty

Restart=always
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
```

## Start service

```
sudo systemctl daemon-reload
sudo systemctl enable tenderdutyd
sudo systemctl start tenderdutyd
```

## &#x20;2. Tạo Bot Telegram

Trong Telegram:

* tìm **@BotFather**
* gõ

```
/newbot
```

* nhập tên bot
* nhập username (phải kết thúc bằng `bot`)

Ví dụ:

```
shentu247_bot
```

BotFather sẽ trả về:

```
123456789:AAxxxxxxxxxxxxxxxxxxxx
```

Đây là **Bot Token**.

⚠️ Không chia sẻ token này công khai.

## Bước 3. Tạo nhóm Telegram

Ví dụ:

```
Shentu Alerts
```

Sau đó

* thêm bot vào nhóm
* cấp quyền Admin cho bot (để bot có thể gửi tin)

***

## Bước 4. Lấy Chat ID

Gửi một tin nhắn trong nhóm:

```
test
```

Sau đó chạy:

```
curl "https://api.telegram.org/bot<TOKEN>/getUpdates"
```

Ví dụ bạn đã nhận được:

```
"id": -5157857623
```

Thì:

```
channel: "-5157857623"
```

***

## Bước 5. Cấu hình Telegram

Trong `config.yml`

```
telegram:  enabled: yes  
api_key: "<BOT_TOKEN>"  
channel: "-5157857623"
```

***

## Bước 6. Cấu hình chain

Ví dụ với Shentu:

```
chains:  "Shentu"
chain_id: shentu-2.2    
valoper_address: shentuvaloper1xxxxxxxxxxxx
```

Tên `"Shentu"` chỉ là nhãn hiển thị trên dashboard, không bắt buộc phải trùng chain id.

***

## Bước 7. Khai báo RPC

Đây là chỗ nhiều người cấu hình sai.

Trước tiên kiểm tra RPC:

```
ss -ltnp | grep shentud
```

Máy của bạn cho kết quả:

```
18657 RPC18656 P2P
```

Do đó:

```
nodes:  - url: tcp://localhost:18657    
alert_if_down: yes
```

Không để:

```
https://some-other-node:443
```

vì đó chỉ là ví dụ trong file mẫu.

***

## Bước 8. Cấu hình cảnh báo

Mình khuyến nghị:

```
alerts:  stalled_enabled: yes  
stalled_minutes: 10  
consecutive_enabled: yes  
consecutive_missed: 5  
percentage_enabled: yes  
percentage_missed: 5  
alert_if_inactive: yes  
alert_if_no_servers: yes
```

Các loại cảnh báo này được Tenderduty hỗ trợ cho validator Cosmos.&#x20;

***

## Bước 9. Khởi động

```
sudo systemctl daemon-reloadsudo 
systemctl enable tenderdutydsudo 
systemctl restart tenderdutyd
```

***

## Bước 10. Kiểm tra log

```
sudo journalctl -fu tenderdutyd
```

Nếu thấy:

```
watching for NewBlock
```

```
found shentuvaloper...
```

```
node localhost:18657 is healthy
```

thì cấu hình đã đúng.

***

## Bước 11. Kiểm tra Telegram

Gửi thử:

```
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-d chat_id="-5157857623" \
-d text="Tenderduty Telegram test"
```

Nếu nhóm nhận được tin nhắn thì Telegram đã hoạt động.

## Bước 12. Test thực tế

Dừng validator:

```
sudo systemctl stop shentud
```

Quan sát:

```
sudo journalctl -fu tenderdutyd
```

Tenderduty sẽ phát hiện:

* RPC down
* no usable endpoints
* validator inactive (nếu đủ điều kiện)
* miss block

Đồng thời gửi Telegram theo cấu hình.

Sau đó chạy lại:

```
sudo systemctl start shentud
```

***

### Cấu hình mình khuyên dùng cho validator production

* ✅ Dashboard: bật.
* ✅ Telegram: bật.
* ❌ Discord: tắt.
* ❌ PagerDuty: tắt.
* ❌ Slack: tắt.
* ❌ Healthcheck: tắt.
* ❌ Public fallback: `no` (để phát hiện ngay khi RPC local có vấn đề).
* ⚠️ Prometheus: chỉ bật nếu bạn thực sự dùng Grafana/Prometheus; nếu không thì đặt `prometheus_enabled: no` để giảm một cổng dịch vụ không cần thiết.

Đây là cấu hình gọn, ổn định và phù hợp với một validator vận hành trên VPS như Shentu của bạn.
