docs: remove fluff and simplify all documentation

- README reduced from 256 to 188 lines
- FAQ reduced from 133 to 66 lines
- PBS-AGENT simplified to essentials only
- Removed marketing language, obvious advice, redundant sections
- Focused on practical information users actually need
This commit is contained in:
Pulse Monitor
2025-08-06 21:50:09 +00:00
parent efefe4e4e5
commit 586d09caf1
3 changed files with 198 additions and 513 deletions
+130 -199
View File
@@ -1,191 +1,61 @@
# <img src="docs/images/pulse-logo.svg" alt="Pulse Logo" width="32" height="32" style="vertical-align: middle"> Pulse for Proxmox
# Pulse for Proxmox
[![GitHub release](https://img.shields.io/github/v/release/rcourtman/Pulse)](https://github.com/rcourtman/Pulse/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/rcourtman/pulse)](https://hub.docker.com/r/rcourtman/pulse)
[![License](https://img.shields.io/github/license/rcourtman/Pulse)](LICENSE)
Real-time monitoring for Proxmox VE and PBS with alerts and webhooks.
**Real-time monitoring for Proxmox VE and PBS with alerts, webhooks, and a clean web interface.**
> **⚠️ Upgrading from v3?** See [Migration Guide](docs/MIGRATION_V3_TO_V4.md) - automatic upgrades will break.
> **⚠️ IMPORTANT: Upgrading from v3?** See the [Migration Guide](docs/MIGRATION_V3_TO_V4.md) - automatic upgrades will break your installation!
![Dashboard](docs/images/01-dashboard.png)
![Pulse Dashboard](docs/images/01-dashboard.png)
## Features
## Key Features
- Live monitoring of VMs, containers, nodes, storage
- Alerts with email and webhooks (Discord, Slack, Telegram, Teams, ntfy.sh, Gotify)
- Unified view of PBS backups, PVE backups, and snapshots
- PBS push mode for firewalled servers
- Dark/light themes, responsive design
- Built with Go for minimal resource usage
- **Real-time Monitoring** - Live updates for VMs, containers, nodes, and storage via WebSockets
- **Smart Alerts** - Configurable thresholds with email and webhook notifications (Discord, Slack, Gotify, Telegram, ntfy.sh, Teams)
- **Alert History** - Persistent storage of alert events with detailed metrics and timeline
- **Unified Backups** - Single view for PBS backups, PVE backups, and snapshots
- **PBS Push Mode** - Monitor isolated/firewalled PBS servers without inbound connections
- **Modern UI** - Responsive design with dark/light themes, virtual scrolling, and expandable charts
- **Performance** - Built with Go for minimal resource usage, stops polling when no clients connected
- **Secure by Default** - Encrypted configuration storage with flexible credential management
[Screenshots →](docs/SCREENSHOTS.md)
[View Screenshots →](docs/SCREENSHOTS.md)
## Quick Start
## Support Development
Pulse is a solo hobby project developed in my free time. If you find it useful, your support helps keep me motivated and covers hosting costs.
[![GitHub Sponsors](https://img.shields.io/github/sponsors/rcourtman?label=Sponsors&logo=GitHub%20Sponsors&style=for-the-badge)](https://github.com/sponsors/rcourtman)
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/rcourtman)
## Quick Start (2 minutes)
### Prerequisites
- Proxmox VE 7.0+ or PBS 2.0+
- Network access to Proxmox API (ports 8006/8007)
### Install Pulse
Choose **one** method:
### Install
```bash
# Option A: Proxmox Helper Script - Creates dedicated LXC container (EASIEST)
# Option A: Proxmox Helper Script (creates LXC container)
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
# Option B: Docker (Multi-arch: AMD64, ARM64, ARMv7)
docker run -d -p 7655:7655 -v pulse_data:/data --restart unless-stopped rcourtman/pulse:latest
# Option B: Docker
docker run -d -p 7655:7655 -v pulse_data:/data rcourtman/pulse:latest
# Option C: Manual Install (For existing LXC/VMs)
# Option C: Manual (existing systems)
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash
```
### Configure Pulse
### Configure
1. Open Pulse in your browser: `http://<your-server>:7655`
2. Go to **Settings****Nodes****Add Node**
3. Enter your Proxmox credentials
4. Click **Save** - Pulse will start monitoring immediately
1. Open `http://<your-server>:7655`
2. Settings → Nodes → Add Node
3. Enter Proxmox credentials
4. Save
## Configuration
Pulse uses a modern, secure configuration system similar to popular apps like Radarr and Sonarr:
### Everything Through the UI
- **All configuration is done via the web interface** - no manual file editing needed
- **Settings** → **Nodes**: Add/remove Proxmox instances with a simple form
- **Settings** → **General**: Configure ports, intervals, themes, and more
- **Alerts**: Set up thresholds and notification channels
- **Configuration is encrypted** and stored securely with proper permissions
### Zero Configuration Files
Unlike traditional monitoring tools:
- **No YAML/JSON files to edit**
- **No environment variables to set**
- **No complex configurations**
- **Works immediately** after installation
Just open the web UI, add your Proxmox nodes through the interface, and you're done!
### Data Storage
- **Docker**: All data stored in `/data` (mount with `-v pulse_data:/data`)
- **Manual Install**: All data stored in `/etc/pulse`
- **Configuration**: Everything is managed through the web UI
### Configuration Backup & Migration
Pulse v4.0.3+ supports encrypted configuration export/import for backup and migration:
## Docker
### Basic
```bash
# Export configuration (prompts for passphrase)
pulse config export -o pulse-backup.enc
# Import on another instance
pulse config import -i pulse-backup.enc
# Automated deployment (CI/CD)
PULSE_PASSPHRASE=secret pulse config import -i backup.enc --force
# Docker with auto-import on first run
docker run -d \
-v pulse_data:/data \
-v $(pwd)/pulse-backup.enc:/config.enc:ro \
-e PULSE_INIT_CONFIG_FILE=/config.enc \
-e PULSE_INIT_CONFIG_PASSPHRASE=secret \
rcourtman/pulse:latest
```
**Security Notes:**
- Exports are encrypted with AES-256-GCM using your passphrase
- Credentials remain encrypted throughout the export/import process
- API endpoints (`/api/config/export`, `/api/config/import`) require API_TOKEN if configured
- Perfect for Docker deployments and infrastructure as code workflows
### For Docker Users
Pulse provides multi-architecture Docker images supporting:
- **linux/amd64** - Intel/AMD 64-bit servers
- **linux/arm64** - 64-bit ARM (Raspberry Pi 4/5, Apple Silicon)
- **linux/arm/v7** - 32-bit ARM (Raspberry Pi 2/3)
The only environment variables needed are for the initial ports if you want to change defaults:
```bash
docker run -d -p 8080:8080 \
-e PULSE_SERVER_FRONTEND_PORT=8080 \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
```
Available Docker tags:
- `rcourtman/pulse:latest` - Latest stable release
- `rcourtman/pulse:4` - Latest v4.x release
- `rcourtman/pulse:4.0.0` - Specific version
Once running, all configuration is done through the web UI.
### Security
Pulse automatically encrypts and secures all configuration:
- Credentials are encrypted using AES-256-GCM
- Configuration files have restricted permissions (0600)
- No plaintext passwords in config files
- Encryption keys derived from machine ID
See [Security Guide](docs/SECURITY.md) for additional security options.
## Webhooks
Pulse supports multiple webhook providers for alerts:
- **Discord** - Native Discord webhooks with rich embeds
- **Slack** - Slack incoming webhooks
- **Gotify** - Self-hosted push notifications
- **Telegram** - Telegram bot notifications
- **ntfy.sh** - Simple pub-sub notifications
- **Teams** - Microsoft Teams incoming webhooks
- **Generic** - Any webhook endpoint (JSON POST)
Configure webhooks in **Alerts****Destinations****Webhooks**.
## PBS Agent (Push Mode)
For isolated PBS servers that can't be reached directly:
```bash
# On the PBS server:
cd /opt
wget https://github.com/rcourtman/Pulse/releases/latest/download/pulse-pbs-agent.tar.gz
tar xzf pulse-pbs-agent.tar.gz
cd pulse-pbs-agent
./install.sh
```
Configure the agent to push data to your Pulse instance. See [PBS Agent Guide](docs/PBS-AGENT.md).
## Docker Compose
### Docker Compose
```yaml
version: '3.8'
services:
pulse:
image: rcourtman/pulse:latest # Multi-arch: AMD64, ARM64, ARMv7
image: rcourtman/pulse:latest
container_name: pulse
ports:
- "7655:7655"
@@ -197,61 +67,122 @@ volumes:
pulse_data:
```
After starting, configure everything through the web UI at `http://localhost:7655`.
### Unraid
Available in Community Applications - search "Pulse for Proxmox"
## Building from Source
## PBS Agent (Push Mode)
For isolated PBS servers that can't be reached directly:
```bash
# Clone repository
git clone https://github.com/rcourtman/Pulse.git
cd Pulse
# On PBS server
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install-pbs-agent.sh | sudo bash
# Build backend
go build -o pulse ./cmd/pulse
# Configure
sudo nano /etc/pulse-pbs-agent/config.json
# Add pulse_url and api_key
# Build frontend
cd frontend-modern
npm install
npm run build
sudo systemctl restart pulse-pbs-agent
```
# Run
./pulse
[PBS Agent Details →](docs/PBS-AGENT.md)
## Configuration
All configuration through web UI:
- **Settings → Nodes**: Add/remove Proxmox instances
- **Settings → General**: Ports, intervals, themes
- **Alerts**: Thresholds and notifications
Data locations:
- **Docker**: `/data` volume
- **Manual**: `/etc/pulse`
### Backup/Restore
```bash
# Export (v4.0.3+)
pulse config export -o backup.enc
# Import
pulse config import -i backup.enc
```
Or use Settings → Security tab in UI.
## Updates
### Docker
```bash
docker pull rcourtman/pulse:latest
docker stop pulse
docker rm pulse
# Run docker run command again
```
### Manual Install
Settings → System → Check for Updates
## API
```bash
# Status
curl http://localhost:7655/api/status
# Metrics
curl http://localhost:7655/api/metrics
# With authentication (if configured)
curl -H "X-API-Token: your-token" http://localhost:7655/api/status
```
## Troubleshooting
### Common Issues
### Connection Issues
- Check Proxmox API is accessible (port 8006/8007)
- Verify credentials have PVEAuditor role minimum
- For PBS: ensure API token has Datastore.Audit permission
1. **"Connection refused" error**
- Check firewall rules for port 7655
- Verify Pulse is running: `systemctl status pulse-backend`
### High CPU/Memory
- Reduce polling interval in Settings
- Check number of monitored nodes
- Disable unused features (backups, snapshots)
2. **"Invalid credentials" error**
- Ensure user has at least `PVEAuditor` role
- For PBS, user needs `DatastoreReader` permissions
- Try token authentication instead of password
### Logs
```bash
# Docker
docker logs pulse
3. **No data showing**
- Check browser console for errors
- Verify Proxmox API is accessible from Pulse server
- Check Pulse logs: `journalctl -u pulse -f`
# Manual
journalctl -u pulse -f
```
### Getting Help
## Security
- [Report Issues](https://github.com/rcourtman/Pulse/issues)
- [Discussions](https://github.com/rcourtman/Pulse/discussions)
- [FAQ](docs/FAQ.md)
- Credentials stored encrypted (AES-256-GCM)
- Optional API token authentication
- Export/import requires passphrase
- [Security Details →](docs/SECURITY.md)
## Development
```bash
# Frontend
cd frontend-modern
npm install
npm run dev
# Backend
go run cmd/pulse/*.go
```
## Links
- [Releases](https://github.com/rcourtman/Pulse/releases)
- [Docker Hub](https://hub.docker.com/r/rcourtman/pulse)
- [Issues](https://github.com/rcourtman/Pulse/issues)
- [Discord](https://discord.gg/hEEupTH2x3)
## License
This project is licensed under the MIT License - see [LICENSE](LICENSE) file for details.
## Acknowledgments
- Built with [Go](https://golang.org/) and [SolidJS](https://www.solidjs.com/)
- Icons by [Lucide](https://lucide.dev/)
- Inspired by the Proxmox community's monitoring needs
---
Made with ❤️ for the Proxmox community
MIT - See [LICENSE](LICENSE)
+38 -105
View File
@@ -1,133 +1,66 @@
# Frequently Asked Questions
## General
### What is Pulse?
Pulse is a real-time monitoring tool for Proxmox Virtual Environment (PVE) and Proxmox Backup Server (PBS). It provides a modern web interface with alerts, webhooks, and comprehensive monitoring capabilities.
### Is Pulse free?
Yes, Pulse is completely free and open source under the MIT license.
### What versions of Proxmox are supported?
- Proxmox VE 7.0 and later
- Proxmox Backup Server 2.0 and later
# FAQ
## Installation
### What's the easiest way to install Pulse?
The automated LXC container script is the easiest method:
### What's the easiest way to install?
```bash
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
```
### Can I run Pulse in Docker?
Yes! Pulse has official Docker images:
```bash
docker run -d -p 7655:7655 -v pulse_config:/etc/pulse -v pulse_data:/data rcourtman/pulse:latest
```
### What are the minimum system requirements?
- CPU: 1 vCPU
- RAM: 512MB (1GB recommended)
- Disk: 1GB
- Network: Access to Proxmox API
### System requirements?
- 1 vCPU, 512MB RAM (1GB recommended), 1GB disk
- Network access to Proxmox API
## Configuration
### How do I add a Proxmox node?
1. Open Pulse web UI
2. Go to Settings → Nodes
3. Click "Add Node"
4. Enter your Proxmox credentials
5. Click "Test Connection" then "Save"
### How do I add a node?
Settings → Nodes → Add Node → Enter credentials → Save
### What permissions does the Pulse user need?
- For PVE: `PVEAuditor` role minimum
- For PBS: `DatastoreReader` permission
- For full features: `PVEAdmin` recommended
### What permissions needed?
- PVE: `PVEAuditor` minimum
- PBS: `DatastoreReader` minimum
### Should I use username/password or API tokens?
API tokens are more secure and recommended for production use. They can be created in Proxmox under Datacenter → Permissions → API Tokens.
### How do I configure alerts?
1. Go to Alerts tab
2. Set your thresholds for CPU, Memory, and Disk
3. Add notification channels (email, webhooks)
4. Configure alert schedule if needed
### API tokens vs passwords?
API tokens are more secure. Create in Proxmox: Datacenter → Permissions → API Tokens
## Troubleshooting
### Why is Pulse not showing any data?
1. Check if Pulse can reach your Proxmox server
2. Verify credentials are correct
3. Check firewall rules for ports 8006 (PVE) or 8007 (PBS)
4. Look at Pulse logs: `journalctl -u pulse -f`
### No data showing?
- Check Proxmox API is reachable (port 8006/8007)
- Verify credentials
- Check logs: `journalctl -u pulse -f`
### Connection refused errors
- Ensure port 7655 is not blocked
- Check if Pulse is running: `systemctl status pulse`
- Verify bind addresses in configuration
### Connection refused?
- Check port 7655 is open
- Verify Pulse is running: `systemctl status pulse`
### Invalid credentials error
- Ensure user exists in Proxmox
- Check realm is correct (e.g., @pam, @pve)
- For API tokens, ensure token is not expired
- Verify user has required permissions
### Invalid credentials?
- Check username includes realm (@pam, @pve)
- Verify API token not expired
- Confirm user has required permissions
### High memory usage
- This is usually from storing metrics history
- Reduce `metricsRetentionDays` in settings
- Restart Pulse to clear old metrics
## Security
### Is Pulse secure?
Pulse is designed for internal networks. It uses encrypted storage for credentials and supports various security levels. See the [Security Guide](SECURITY.md) for details.
### Can I expose Pulse to the internet?
This is not recommended. If needed:
1. Use a reverse proxy with authentication
2. Enable HTTPS
3. Use strong passwords
4. Consider VPN access instead
### How are credentials stored?
Credentials are encrypted using AES-256-GCM and stored in `/etc/pulse/pulse.enc`. The encryption key is derived from the machine ID.
### High memory usage?
Reduce `metricsRetentionDays` in settings and restart
## Features
### Can Pulse monitor multiple Proxmox clusters?
Yes! You can add multiple PVE and PBS instances in Settings → Nodes.
### Multiple clusters?
Yes, add multiple nodes in Settings
### Does Pulse support PBS in push mode?
Yes, for isolated PBS servers, you can use the PBS agent that pushes data to Pulse.
### PBS push mode?
Yes, use PBS agent for isolated servers. See [PBS Agent docs](PBS-AGENT.md)
### What webhook providers are supported?
- Discord
- Slack
- Gotify
- Telegram
- ntfy.sh
- Microsoft Teams
- Generic webhooks (any JSON endpoint)
### Webhook providers?
Discord, Slack, Gotify, Telegram, ntfy.sh, Teams, generic JSON
### Can I use Pulse with a reverse proxy?
Yes, Pulse works well behind reverse proxies like Nginx, Caddy, or Traefik. Make sure to configure WebSocket support.
### Does Pulse have an API?
Yes, Pulse provides a REST API. See the API section in the README for endpoints.
### Works with reverse proxy?
Yes, ensure WebSocket support is enabled
## Updates
### How do I update Pulse?
- **Docker**: Pull the latest image and recreate the container
- **LXC/Manual**: Use the update script or download the latest release
- **From source**: Git pull and rebuild
### How to update?
- **Docker**: Pull latest image, recreate container
- **Manual**: Settings → System → Check for Updates
### Will updates break my configuration?
No, Pulse maintains backward compatibility. Your configuration is preserved during updates.
### How do I know when updates are available?
- Watch the GitHub repository for releases
- Check the version in Settings → About
- Enable GitHub notifications for the project
### Will updates break config?
No, configuration is preserved
+30 -209
View File
@@ -1,240 +1,61 @@
# PBS Agent Guide
# PBS Agent (Push Mode)
The PBS Agent allows isolated or firewalled Proxmox Backup Servers to push their data to Pulse, eliminating the need for inbound connections.
For PBS servers behind firewalls or in isolated networks that can't be reached by Pulse directly.
## When to Use PBS Agent
Use the PBS Agent when:
- Your PBS server is behind a firewall with no inbound access
- PBS is on an isolated network segment
- You want to monitor PBS without opening firewall ports
- Corporate security policies prevent inbound connections
## How It Works
```
┌─────────────┐ ┌─────────────┐
│ PBS │ Push → │ Pulse │
│ (Agent) │ --------> │ Server │
│ Port: 8007 │ │ Port: 7655 │
└─────────────┘ └─────────────┘
```
The agent runs on your PBS server and:
1. Collects metrics locally via PBS API
2. Pushes data to your Pulse server
3. Handles connection failures gracefully
4. Automatically retries on network issues
## Installation
### Quick Install
## Quick Install
On your PBS server:
```bash
# Download and extract
cd /opt
wget https://github.com/rcourtman/Pulse/releases/latest/download/pulse-pbs-agent.tar.gz
tar xzf pulse-pbs-agent.tar.gz
cd pulse-pbs-agent
# Run installer
sudo ./install.sh
```
### Manual Installation
1. **Download the agent binary**:
```bash
wget https://github.com/rcourtman/Pulse/releases/latest/download/pulse-pbs-agent
chmod +x pulse-pbs-agent
sudo mv pulse-pbs-agent /usr/local/bin/
```
2. **Create configuration**:
```bash
sudo mkdir -p /etc/pulse-agent
sudo nano /etc/pulse-agent/config.yml
```
3. **Add configuration**:
```yaml
# Pulse server details
pulse:
url: http://your-pulse-server:7655
token: your-agent-token # Generated in Pulse UI
# PBS connection
pbs:
host: https://localhost:8007
user: monitor@pbs
password: your-password
# Or use API token:
# tokenName: monitor
# tokenValue: secret-token
verifySSL: false
# Agent settings
agent:
interval: 30 # Seconds between updates
name: pbs-prod # Unique name for this PBS
```
4. **Create systemd service**:
```bash
sudo nano /etc/systemd/system/pulse-pbs-agent.service
```
```ini
[Unit]
Description=Pulse PBS Agent
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/pulse-pbs-agent
Restart=always
RestartSec=10
User=pulse-agent
Group=pulse-agent
WorkingDirectory=/etc/pulse-agent
[Install]
WantedBy=multi-user.target
```
5. **Start the service**:
```bash
sudo useradd -r -s /bin/false pulse-agent
sudo chown -R pulse-agent:pulse-agent /etc/pulse-agent
sudo chmod 600 /etc/pulse-agent/config.yml
sudo systemctl daemon-reload
sudo systemctl enable --now pulse-pbs-agent
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install-pbs-agent.sh | sudo bash
```
## Configuration
### Pulse Server Setup
1. In Pulse UI, go to **Settings****PBS Agents**
2. Click **Add Agent**
3. Enter a name and generate a token
4. Copy the token for agent configuration
### Agent Configuration Options
```yaml
pulse:
url: http://pulse.example.com:7655 # Your Pulse server
token: abc123... # Agent auth token
timeout: 30 # Connection timeout (seconds)
retryInterval: 60 # Retry interval on failure
pbs:
host: https://localhost:8007 # PBS API endpoint
user: monitor@pbs # PBS user
password: secret # PBS password
fingerprint: "AA:BB:CC..." # Optional TLS fingerprint
verifySSL: true # Verify SSL certificates
agent:
interval: 30 # Update interval (seconds)
name: pbs-prod # Unique agent name
logLevel: info # Log verbosity (debug|info|warn|error)
Edit `/etc/pulse-pbs-agent/config.json`:
```json
{
"pulse_url": "http://your-pulse-server:7655",
"api_key": "your-api-key-from-pulse-settings",
"poll_interval": 30,
"pbs_url": "https://localhost:8007",
"pbs_username": "apiuser@pbs",
"pbs_token_name": "pulse",
"pbs_token_value": "uuid-from-pbs"
}
```
### Environment Variables
All settings can be overridden with environment variables:
```bash
PULSE_URL=http://pulse:7655
PULSE_TOKEN=your-token
PBS_HOST=https://localhost:8007
PBS_USER=monitor@pbs
PBS_PASSWORD=secret
AGENT_INTERVAL=60
AGENT_NAME=pbs-backup
```
## Monitoring Multiple PBS Servers
To monitor multiple PBS servers with agents:
1. Install the agent on each PBS server
2. Use unique agent names for each
3. Generate separate tokens in Pulse UI
4. Each agent pushes to the same Pulse server
## Troubleshooting
### Check Agent Status
## Start Agent
```bash
sudo systemctl enable --now pulse-pbs-agent
sudo systemctl status pulse-pbs-agent
sudo journalctl -u pulse-pbs-agent -f
```
### Common Issues
## Get API Key
**Agent can't connect to Pulse**:
- Verify Pulse server URL is correct
- Check network connectivity: `curl http://pulse-server:7655/api/health`
- Ensure firewall allows outbound connections
- Verify agent token is valid
In Pulse web UI: Settings → General → API Key → Generate
**Agent can't connect to PBS**:
- Check PBS API is accessible: `curl -k https://localhost:8007`
- Verify PBS credentials
- Ensure PBS user has DatastoreReader permission
- Check SSL settings if using self-signed certificates
## Create PBS Token
**High CPU usage**:
- Increase the update interval
- Check PBS API performance
- Review agent logs for errors
In PBS web UI:
1. Configuration → Access Control → API Tokens
2. Add Token
3. User: Choose user with Datastore.Audit permission
4. Copy token ID (username@pbs!tokenname) and secret
**Data not appearing in Pulse**:
- Verify agent name matches configuration
- Check Pulse logs for incoming data
- Ensure agent token has correct permissions
- Look for errors in agent logs
## Verify
### Debug Mode
Run the agent in debug mode:
Check agent logs:
```bash
pulse-pbs-agent -debug
journalctl -u pulse-pbs-agent -f
```
Or set in config:
```yaml
agent:
logLevel: debug
```
## Security Considerations
1. **Use API tokens** instead of passwords when possible
2. **Secure the config file**: `chmod 600 /etc/pulse-agent/config.yml`
3. **Use HTTPS** for Pulse server connections in production
4. **Rotate tokens** periodically
5. **Monitor agent logs** for suspicious activity
In Pulse UI, PBS data should appear within 1 minute.
## Uninstall
```bash
# Stop and disable service
sudo systemctl stop pulse-pbs-agent
sudo systemctl disable pulse-pbs-agent
# Remove files
sudo rm -rf /etc/pulse-pbs-agent
sudo rm /usr/local/bin/pulse-pbs-agent
sudo rm -rf /etc/pulse-agent
sudo rm /etc/systemd/system/pulse-pbs-agent.service
sudo systemctl daemon-reload
# Remove user
sudo userdel pulse-agent
```