Skip to content

Grafana Dashboards

Grafana provides visual analytics dashboards connected to the PostgreSQL database.

Overview

Container Details

PropertyValue
Containermediamagic-grafana
Port3200
VersionGrafana 11
Data SourcePostgreSQL

Included Dashboards

Social Overview

File: grafana/dashboards/social-overview.json

Provides a high-level view of social media performance:

Panels:

  • Total Followers — Sum across all platforms
  • Follower Growth — Change over selected period
  • Engagement Rate — Average engagement percentage
  • Follower Trend — Line chart by platform
  • Platform Comparison — Bar chart of metrics
  • Top Posts — Table with engagement details

Post Performance

File: grafana/dashboards/post-performance.json

Detailed analysis of individual post performance:

Panels:

  • Total Posts — Count in period
  • Total Engagement — Likes + comments + shares
  • Engagement Timeline — Time series chart
  • Post Details — Sortable table with all metrics

Dashboard Variables

Both dashboards use variables for filtering:

VariableTypePurpose
$platformQueryFilter by platform
$timeRangeTime RangeSelect date range

Configuration Files

Data Source

yaml
# grafana/provisioning/datasources/postgres.yml
apiVersion: 1
datasources:
  - name: PostgreSQL
    type: postgres
    url: postgres:5432
    database: mediamagic_analytics
    user: mediamagic
    secureJsonData:
      password: ${POSTGRES_PASSWORD}
    jsonData:
      sslmode: disable
      maxOpenConns: 10
      maxIdleConns: 10

Dashboard Provisioning

yaml
# grafana/provisioning/dashboards/default.yml
apiVersion: 1
providers:
  - name: 'default'
    type: file
    options:
      path: /var/lib/grafana/dashboards

Panel Examples

Follower Trend (Time Series)

sql
SELECT
  date as time,
  platform,
  count as "Followers"
FROM platform_followers
WHERE date >= $__timeFrom()
  AND date <= $__timeTo()
  AND ($platform = 'all' OR platform = $platform)
ORDER BY date

Top Posts (Table)

sql
SELECT
  platform,
  LEFT(content, 100) as "Content",
  likes as "Likes",
  comments as "Comments",
  shares as "Shares",
  engagement_rate as "Rate %"
FROM post_performance
WHERE collected_at >= $__timeFrom()
ORDER BY likes + comments + shares DESC
LIMIT 20

Platform Comparison (Bar Chart)

sql
SELECT
  platform,
  SUM(impressions) as "Impressions",
  SUM(engagement) as "Engagement"
FROM social_metrics
WHERE metric_date >= $__timeFrom()
GROUP BY platform

Custom Dashboards

Creating a New Dashboard

  1. Log into Grafana at http://localhost:3200
  2. Click "+"Dashboard
  3. Add panels with PostgreSQL queries
  4. Save dashboard

Exporting Dashboard

  1. Open dashboard
  2. Settings (gear icon)
  3. JSON Model
  4. Copy and save to grafana/dashboards/

Dashboard Best Practices

Use Variables

Add variables for platform and date range to make dashboards interactive.

Set Refresh Rate

Configure auto-refresh (e.g., 5 minutes) for real-time monitoring.

Organize with Rows

Group related panels into rows for better organization.

Accessing Grafana

EnvironmentURLCredentials
Localhttp://localhost:3200admin / (from .env)
Productionhttps://analytics.yourdomain.comadmin / (from .env)

Alerts (Optional)

Grafana can send alerts based on thresholds:

yaml
# Example alert rule
- name: FollowerDrop
  condition: 
    - query: follower_count
      reducer: last
      evaluator: lt(1000)
  notifications:
    - email: alerts@example.com

Troubleshooting

"No data" in panels
  1. Check PostgreSQL connection in Data Sources
  2. Verify tables have data:
    bash
    docker compose exec postgres psql -U mediamagic -d mediamagic_analytics -c "SELECT COUNT(*) FROM social_metrics"
  3. Check time range includes data dates
Data source connection error
  1. Check PostgreSQL is running:
    bash
    docker compose ps postgres
  2. Verify password in Grafana matches .env
  3. Check network connectivity between containers

MediaMagic CRM Documentation