============================================= Troubleshooting Steps when your Site is down. ============================================= If you have configured web check alert for your site, You might receive the alert for the below scenario's during which the web-check alert will be triggered - When the site is DOWN - When the site loads very slow (i.e. when the site takes more than 60 seconds to load) -> This depends on the Timeout setting. **************************************************************** Below are steps to Troubleshoot the issue when your site is Down **************************************************************** Sometimes we may run into trouble when one of our web-server or site is down, We should be able to identify this problem which is likely causing the issues, and fix the problem. Step 1 : Check the server status ================================ Before proceeding with the mentioned steps,First we need to check if you are able to access the server itself. Sometimes the Server itself may have went down.You can verify this with ping and ssh command :: ping your_server_ip If you able ping your server and its UP,You will get the output as below :: e2e@compaqlaptop:~$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=18.0 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=20.1 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=21.3 ms ^C --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 18.042/19.837/21.342/1.362 ms e2e@compaqlaptop:~$ If your server is down,in that case you will get not get any ping.You can Check your server console for any error and restart your server via Myaccount .. Note:: You may sometimes not be able to ping the server even when your server is UP and this may be due to ping being disabled on your server You should also be able to SSH and login to the server to verify if its up and running fine, You can access your server via ssh with below command :: ssh username@xx.xx.xx.xx if you are not able to login to your server, Chances are that your server is down or in a hanged state and Check your server console for any error and restart your server via Myaccount Step 2 : Monitoring your server =============================== A high processor load or memory consumption can make your server unresponsive. You can refer to this article on how to `Monitor E2E server via Zabbix `_ Once you have identified the anomalies in your server resources utilization,You can take necessary action accordingly to prevent the issue. Step 3 : Check the Logs ======================== Before tracking down any of the problems, We need to check the Logs first of our web server and related components. If we found any error logs or any suspicious logs on access logs, We will be able to identify the problems Precisely. The logs will be usually present at directory /var/log. if you have an Apache server running on an Ubuntu server, by default the logs will be kept in /var/log/apache2 . Check the files in this directory to see what kind of error messages are being generated.If you’re using a distribution that refers to Apache as httpd by default the logs will be kept at :: /var/log/httpd.log If you are using Nginx as your web server, The logs are usually located at the below location :: /var/log/nginx/access.log /var/log/nginx/error.log /var/log/nginx/nginx_error.log /var/log/nginx/access_error.log Check the files in this directory to see what kind of error messages are being generated. Alternately you can also check the web-server configuration files if you have configured a manual path for logs. To check the latest logs generated from the server, You can run the below tail command as shown in the below example :: tail -f /var/log/nginx/access.log tail -f /var/log/httpd.log You can also view with less command to view full logs as below,Make sure to change the log file path as per yours in below command. :: less /var/log/nginx/access.log once you have identified the issue over the logs, You can easily be able to detect the issue and fix the problem accordingly. Step 4: Make sure your web server is running ============================================ You can verify if your services are up and running fine, One method to check if the services are running is distribution’s preferred method is to check with below-shared command. Use the status command to check if the service is up or not. If the service is not running you can start it with the below start command If you’re using a distribution that refers to Apache as Apache2, commands to use apache2 functionality is as below :: service apache2 start service apache2 stop service apache2 restart service apache2 reload service apache2 status If you’re using a distribution that refers to Apache as httpd, then the commands are as follows: :: service httpd start service httpd stop service httpd restart service httpd reload service httpd status The commands to use Nginx functionality is as below :: service nginx start service nginx stop service nginx restart service nginx reload service nginx status Step 5 : Verifying the Syntax of Web server =========================================== If your web server is failing to start,this means that there can be an issue with your configuration file. Both Apache and Nginx need correct directive syntax in order for the files to be read.The configuration files are located as below Default Configuration Directories for Apache is Debian and Ubuntu distributions : /etc/apache2/ Fedora, CentOS distributions : /etc/httpd/ Configuration Directories for Nginx is :: /etc/nginx/ Each of these web servers also provide you with the ability to check the configuration syntax of your files.To check the syntax of your Apache configuration files without needing to restart the server, you can run the following command on Debian and Ubuntu systems :: apache2ctl -t httpd -t To check configuration Syntax on Nginx,Use below command :: nginx -t Once you run the above command you will get message like Syntax OK or Test is successful,This means that your there is no error at your web server configuration.if you get message like “test failed”,There is an invalid argument which are provided in the configuration file and that needs to be edited. Step 6 : Is your Database back-end running Fine =============================================== If you have configured your site to connect with database back-end like MySQL, PostreSQL, MongoDB, etc. you need to make sure that it is up and running.You can do this as you checked for Web server. Run the below command to verify if your database MySQL/Mongod whichever you are running. :: service mysql status service mysqld status service mongod status Alternately you can also verify with below netstat command :: netstat -ntlp | grep mysql You will receive output as below if your MySQL is up and running. :: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3356/mysqld Step 7 : Verify if your Web/App server is able to connect to Database backend ============================================================================= Even though if your web server and Database server is Up and running fine,Sometime we may face issue with its connectivity as your Application will not be able to connect to Database successfully. For instance, In a WordPress site, the database connection settings can be tested with the configuration located in wp-config.php file. You need to check that the DB_NAME, DB_USER, and DB_PASSWORD are correct in order for your site to connect to the database. You can test whether the file has the correct information by trying to connect to the database manually by changing appropriate Value in below command :: mysql -hDB_Host -uDB_USER -pDB_PASSWORD Step 8 : Make sure the Ports are open ===================================== Even if the all the configuration and connectivity are right,Some times you not be able to access the site since the configured ports must be accessible.Web servers run on port 80 for normal web traffic and use port 443 for traffic encrypted with SSL. You can check whether if the configured ports are open with telnet command :: telnet your_server_ip 80 telnet your_server_ip 443 You will get output like below if your ports are open :: e2e@compaqlaptop:~$ telnet xx.xx.xx.xx 80 Trying xx.xx.xx.xx… Connected to xx.xx.xx.xx. Escape character is ‘^]’. You can also verify if your App/Web server is able to connect to your database port on back-end.MySQL server by default run on port 3306 :: telnet your_database_server_ip 3306 If your web ports or Database ports is not accessible, you should look at your firewall configuration. You may need to open up port 80,port 443 or Port 3306 respectively. Step 9 : Verifying the DNS Setting ================================== You also need to make sure that your domain is correctly pointed to Server IP.if you can access the site with IP and not with your domain name,you may need to take a look at your DNS settings. You can verify if your site is pointed to the right IP with below dig command dig A example.com +short You will get the output as below :: e2e@compaqlaptop:~$ dig A example.com +short xx.xx.xx.xx e2e@compaqlaptop:~$ Apart from that,check your Apache virtual host files or the Nginx server block files to make sure they are configured to respond to requests for your domain. Conclusion ========== We hope that the above mentioned troubleshooting tips will have helped you track down and fix some of the common issues that administrators face when trying to get their sites up and running.If you are encountering any issue with the above mentioned steps,feel free to discuss them in the comments.