Skip to content

Instantly share code, notes, and snippets.

@rposbo
Last active November 2, 2015 19:38
Show Gist options
  • Save rposbo/c542ddcd0d814efbd8c6 to your computer and use it in GitHub Desktop.
Save rposbo/c542ddcd0d814efbd8c6 to your computer and use it in GitHub Desktop.

Revisions

  1. rposbo revised this gist Nov 18, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion statsd_graphite_ubuntu14.sh
    Original file line number Diff line number Diff line change
    @@ -104,7 +104,7 @@ expect << DONE
    expect eof
    DONE

    # start the carbon deamon
    # start the carbon daemon
    sudo /opt/graphite/bin/carbon-cache.py start

    ## Configure Apache
  2. rposbo revised this gist Nov 18, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion statsd_graphite_ubuntu14.sh
    Original file line number Diff line number Diff line change
    @@ -94,7 +94,7 @@ EOF
    cd /opt/graphite/webapp/graphite
    sudo python manage.py syncdb --noinput

    sudo python manage.py createsuperuser --noinput --username "admin" --email "admin@mailcloud.com"
    sudo python manage.py createsuperuser --noinput --username "admin" --email "admin@example.com"
    expect << DONE
    spawn sudo python manage.py changepassword "admin"
    expect "Password: "
  3. rposbo revised this gist Nov 18, 2014. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions statsd_graphite_ubuntu14.sh
    Original file line number Diff line number Diff line change
    @@ -104,6 +104,9 @@ expect << DONE
    expect eof
    DONE

    # start the carbon deamon
    sudo /opt/graphite/bin/carbon-cache.py start

    ## Configure Apache
    sudo chown -R www-data:www-data /opt/graphite/storage
    sudo mkdir -p /etc/httpd/wsgi
  4. rposbo created this gist Nov 18, 2014.
    169 changes: 169 additions & 0 deletions statsd_graphite_ubuntu14.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,169 @@
    #!/bin/bash

    echo "#### Starting"
    echo "#### apt-get updating and installing"
    sudo apt-get update
    sudo apt-get install screen libexpat1-dev libicu-dev git build-essential curl software-properties-common python-software-properties -y

    echo "#### Installing node"
    # Node
    . ~/.bashrc
    export "PATH=$HOME/local/bin:$PATH"
    mkdir -p $HOME/local
    mkdir -p $HOME/node-latest-install

    pushd $HOME/node-latest-install
    curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
    ./configure --prefix=~/local
    make install
    popd

    sudo ln -s /usr/bin/nodejs /usr/bin/node

    echo "#### npming nodemon"
    sudo apt-get install npm -y
    sudo npm install -g nodemon

    echo "#### installing statsd"
    # StatsD
    sudo mkdir -p /opt
    pushd /opt
    sudo git clone https://github.com/etsy/statsd.git
    cat >> /tmp/localConfig.js << EOF
    {
    graphitePort: 2003
    , graphiteHost: "127.0.0.1"
    , port: 8125
    , dumpMessages: false
    , debug: false
    , backends: ['./backends/graphite']
    }
    EOF

    sudo cp /tmp/localConfig.js /opt/statsd/localConfig.js
    popd

    echo "#### GRAPHITE"
    ## install prereqs
    sudo apt-get update
    sudo apt-get upgrade -y

    sudo apt-get install -y apache2
    sudo apt-get install -y erlang-os-mon
    sudo apt-get install -y erlang-snmp
    sudo apt-get install -y expect
    sudo apt-get install -y libapache2-mod-python
    sudo apt-get install -y libapache2-mod-wsgi
    sudo apt-get install -y memcached
    sudo apt-get install -y python-cairo-dev
    sudo apt-get install -y python-dev
    sudo apt-get install -y python-ldap
    sudo apt-get install -y python-memcache
    sudo apt-get install -y python-pip
    sudo apt-get install -y python-pysqlite2
    sudo apt-get install -y sqlite3

    sudo pip install graphite-web
    sudo pip install carbon
    sudo pip install whisper
    sudo pip install Twisted==11.1.0
    sudo pip install django==1.5
    sudo pip install django-tagging

    ## setup configuration
    sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
    sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

    sudo tee -a /opt/graphite/conf/storage-schemas.conf > /dev/null << EOF
    [stats]
    pattern = ^stats.*
    retentions = 10s:6h,1min:6d,10min:1800d
    EOF
    # or:
    # sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

    cat >> /opt/graphite/webapp/graphite/local_settings.py << EOF
    DEBUG = True
    TIME_ZONE = 'Greenwich'
    ALLOWED_HOSTS = [ '*' ]
    EOF
    # or:
    # sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

    ## setup django super user
    cd /opt/graphite/webapp/graphite
    sudo python manage.py syncdb --noinput

    sudo python manage.py createsuperuser --noinput --username "admin" --email "[email protected]"
    expect << DONE
    spawn sudo python manage.py changepassword "admin"
    expect "Password: "
    send -- "LOVELYP@SSWORD!\r"
    expect "Password (again): "
    send -- "LOVELYP@SSWORD!\r"
    expect eof
    DONE

    ## Configure Apache
    sudo chown -R www-data:www-data /opt/graphite/storage
    sudo mkdir -p /etc/httpd/wsgi

    sudo cat >> /tmp/graphite-vhost.conf << EOF
    WSGISocketPrefix /etc/httpd/wsgi
    <VirtualHost *:80>
    DocumentRoot /opt/graphite/webapp
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, OPTIONS"
    Header set Access-Control-Allow-Headers "origin, authorization, accept"
    ErrorLog /opt/graphite/storage/log/webapp/error.log
    CustomLog /opt/graphite/storage/log/webapp/access.log common
    # I've found that an equal number of processes & threads tends
    # to show the best performance for Graphite (ymmv).
    WSGIDaemonProcess graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120
    WSGIProcessGroup graphite
    WSGIApplicationGroup %{GLOBAL}
    WSGIImportScript /opt/graphite/conf/graphite.wsgi process-group=graphite application-group=%{GLOBAL}
    WSGIScriptAlias / /opt/graphite/conf/graphite.wsgi
    Alias /content/ /opt/graphite/webapp/content/
    # python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
    Alias /media/ "/usr/lib/python2.7/dist-packages/django/contrib/admin/media/"
    <Directory /opt/graphite/webapp>
    Options All
    AllowOverride All
    Require all granted
    </Directory>
    <Directory /opt/graphite/conf/>
    Options All
    AllowOverride All
    Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    EOF
    sudo mv /tmp/graphite-vhost.conf /etc/apache2/sites-available/

    ## attempt to get the graphite website running
    sudo a2dissite default
    sudo a2dissite 000-default

    sudo a2enmod wsgi
    sudo a2enmod headers
    sudo a2ensite graphite-vhost

    sudo service apache2 restart

    echo "**** ALL DONE! ****"

    # Start statsD
    screen nodemon /opt/statsd/stats.js /opt/statsd/localConfig.js