How to set instance status using AWS CLI?

by XDK 1. October 2019 22:32

Explanation:

Following is the command to set the health status of the specified instance.

aws autoscaling set-instance-health --instance-id <ID> --health-status <Healthy/Unhealthy>

Example: To set the instance Unhealthy

aws autoscaling set-instance-health --instance-id i-123456789 --health-status Unhealthy

Tags: ,

Amazon Web Service

How to create custom CloudWatch memory metrics for ubuntu EC2 instance?

by XDK 28. September 2019 01:39

Explanation:

Launch an EC2 instance for which the custom CloudWatch memory metrics need to be generated.

Create an IAM role named "CustomMetricsRole" with a custom policy name "CustomEC2CloudWatch" to establish the interoperability between EC2 instance and CloudWatch as below
Policy : CustomEC2CloudWatch
Permissions:
{
"Version": "2012-10-17",
   "Statement": [
     {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [

          "cloudwatch:GetMetricStatistics",
          "cloudwatch:PutMetricData",
          "cloudwatch:GetMetricData",
          "ec2:DescribeTags",
          "cloudwatch:ListMetrics"

       ],
       "Resource": "*"
     }
  ]
}
Attach IAM role to the EC2 instance

SSH to EC2 instance
$ sudo apt update
$ sudo apt install unzip
$ sudo apt install perl
$ sudo apt install liblwp-protocol-https-perl libdatetime-perl

Download the CloudWatch Monitoring perl scripts for Linux
$ wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
$ unzip CloudWatchMonitoringScripts-1.2.1.zip
$ cd aws-scripts-mon

mon-put-instance-data.pl - Collects system metrics on an EC2 instance and sends them to CloudWatch
mon-get-instance-stats.pl - Queries CloudWatch and displays the most resent metrics
AwsSignatureV4.pm - File template for AWS credentials

Push custom metrics from EC2 instance to CloudWatch
$ ./mon-put-instance-data.pl --mem-util --mem-used --mem-avail

Create crontab and add the script to run at every minute intervals.
$ crontab -e
* * * * * /home/ubuntu/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail

 

To retrive the most recent custom metrics from CloudWatch to EC2 instance
$
./mon-get-instance-stats.pl

Tags: ,

Amazon Web Service | CloudWatch | Perl

Linux Cron Job Examples

by XDK 27. September 2019 22:38

Crontab Commands
export EDITOR=vi ;to specify a editor to open crontab file.
crontab -e Edit crontab file, or create one if it doesn’t already exist.
crontab -l crontab list of cronjobs , display crontab file contents.
crontab -r Remove your crontab file.
crontab -v Display the last time you edited your crontab file. (This option is only available on a few systems.)

Linux Crontab Format
MIN HOUR DOM MON DOW CMD

Schedule a cron to execute at 2am daily.
This will be useful for scheduling database backup on a daily basis.
0 2 * * * CMD
Asterisk (*) is used for matching all the records.

Schedule a cron to execute twice a day.
Below example command will execute at 5 AM and 5 PM daily. You can specify multiple time stamp by comma separated.
0 5,17 * * * CMD

Schedule a cron to execute on every minutes.
Generally, we don’t require any script to execute on every minute but in some case, you may need to configure it.
* * * * * CMD

Schedule a cron to execute on every Sunday at 5 PM.
This type of cron is useful for doing weekly tasks, like log rotation, etc.
0 17 * * sun CMD

Schedule a cron to execute on every 10 minutes.
If you want to run your script on 10 minutes interval, can configure like below. These type of crons are useful for monitoring.
*/10 * * * * /scripts/monitor.sh
*/10: means to run on every 10 minutes. Same as if you want to execute on every 5 minutes use */5.

Schedule a cron to execute on selected months.
Sometimes we required scheduling a task to be executed for selected months only. Below example script will run in January, May and August months.
* * * jan,may,aug * /script/script.sh

Schedule a cron to execute on selected days.
If you required scheduling a task to be executed for selected days only. Below example will run on each Sunday and Friday at 5 PM.
0 17 * * sun,fri /script/script.sh

Schedule a cron to execute on first sunday of every month.
To schedule a script to execute a script on first Sunday only is not possible by time parameter, But we can use the condition in command fields to do it.
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh

Schedule a cron to execute on every four hours.
If you want to run a script on 4 hours interval. It can be configured like below.
0 */4 * * * CMD

Schedule a cron to execute twice on every Sunday and Monday.
To schedule a task to execute twice on Sunday and Monday only. Use the following settings to do it.
0 4,17 * * sun,mon CMD

Schedule a cron to execute on every 30 Seconds.
To schedule a task to execute on every 30 seconds is not possible by time parameters, But it can be done by schedule same cron twice like below.
* * * * * CMD
* * * * * sleep 30; CMD

Schedule a multiple tasks in single cron.
To configure multiple tasks with single cron, Can be done by separating tasks by the semicolon ( ; ).
* * * * * CMD; /scripts/scrit2.sh

Schedule tasks to execute on yearly ( @yearly ).
@yearly timestamp is similar to “0 0 1 1 *”. It will execute task on the first minute of every year.
@yearly CMD

Schedule tasks to execute on monthly ( @monthly ).
@monthly timestamp is similar to “0 0 1 * *”. It will execute a task in the first minute of the month.
@monthly CMD

Schedule tasks to execute on Weekly ( @weekly ).
@weekly timestamp is similar to “0 0 1 * mon”. It will execute a task in the first minute of the week.
@weekly /bin/script.sh

Schedule tasks to execute on daily ( @daily ).
@daily timestamp is similar to “0 0 * * *”. It will execute a task in the first minute of every day.
@daily CMD

Schedule tasks to execute on hourly ( @hourly ).
@hourly timestamp is similar to “0 * * * *”. It will execute a task in the first minute of every hour.
@hourly CMD

Schedule tasks to execute on system reboot ( @reboot ).
@reboot is useful for those tasks which you want to run on your system startup. It is useful for starting tasks in the background automatically.
@reboot CMD

Tags: , ,

Linux

The username you provided is not allowed to use the text-based Tomcat Manager (error 403)

by XDK 26. September 2019 23:54

Exception:

The username you provided is not allowed to use the text-based Tomcat Manager (error 403)

Solution:

Configure tomcat to allow deployment from other source

$ sudo nano ./apache-tomcat-8.5.46/webapps/manager/META-INF/context.xml
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
$ ./apache-tomcat-8.5.46/bin/shutdown.sh
$ ./apache-tomcat-8.5.46/bin/startup.sh

Tags:

JAVA | Tomcat

ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin

by XDK 26. September 2019 23:43

Exception:

Job for jenkins.service failed because the control process exited with error code.
See "systemctl status jenkins.service" and "journalctl -xe" for details.
invoke-rc.d: initscript jenkins, action "start" failed.
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: failed (Result: exit-code) since Thu 2019-09-26 14:35:12 UTC; 13ms ago
Docs: man:systemd-sysv-generator(8)
Process: 14063 ExecStart=/etc/init.d/jenkins start (code=exited, status=1/FAILURE)
Sep 26 14:35:12 ip-172-31-45-94 systemd[1]: Starting LSB: Start Jenkins at boot time...
Sep 26 14:35:12 ip-172-31-45-94 jenkins[14063]: ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin
Sep 26 14:35:12 ip-172-31-45-94 jenkins[14063]: If you actually have java installed on the system make sure the executable is in the aforementioned path and that 'type -p java' returns the java executable path
Sep 26 14:35:12 ip-172-31-45-94 systemd[1]: jenkins.service: Control process exited, code=exited status=1
Sep 26 14:35:12 ip-172-31-45-94 systemd[1]: jenkins.service: Failed with result 'exit-code'.
Sep 26 14:35:12 ip-172-31-45-94 systemd[1]: Failed to start LSB: Start Jenkins at boot time.
dpkg: error processing package jenkins (--configure):
installed jenkins package post-installation script subprocess returned error exit status 1
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.24) ...
Errors were encountered while processing:
jenkins
E: Sub-process /usr/bin/dpkg returned an error code (1)

Solution:

Update JAVA path for Jenkins

ubuntu@ip-172-31-45-94:~/bin$ sudo nano /etc/init.d/jenkins
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/ubuntu/bin/jdk1.8.0_221/bin

ubuntu@ip-172-31-45-94:~/bin$ sudo systemctl daemon-reload
ubuntu@ip-172-31-45-94:~/bin$ sudo service jenkins start
ubuntu@ip-172-31-45-94:~/bin$ sudo service jenkins status
jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Thu 2019-09-26 14:42:40 UTC; 1min 53s ago
Docs: man:systemd-sysv-generator(8)
Process: 14221 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
Sep 26 14:42:39 ip-172-31-45-94 systemd[1]: Starting LSB: Start Jenkins at boot time...
Sep 26 14:42:39 ip-172-31-45-94 jenkins[14221]: Correct java version found
Sep 26 14:42:39 ip-172-31-45-94 jenkins[14221]: * Starting Jenkins Automation Server jenkins
Sep 26 14:42:39 ip-172-31-45-94 su[14267]: Successful su for jenkins by root
Sep 26 14:42:39 ip-172-31-45-94 su[14267]: + ??? root:jenkins
Sep 26 14:42:39 ip-172-31-45-94 su[14267]: pam_unix(su:session): session opened for user jenkins by (uid=0)
Sep 26 14:42:39 ip-172-31-45-94 su[14267]: pam_unix(su:session): session closed for user jenkins
Sep 26 14:42:40 ip-172-31-45-94 jenkins[14221]: ...done.
Sep 26 14:42:40 ip-172-31-45-94 systemd[1]: Started LSB: Start Jenkins at boot time.

Tags:

JAVA | Jenkins

About the author

My name is Xavier Dilip Kumar Jayaraj having 16+ years of IT experience which includes solid experience and depth Knowledge in Application Life Cycle Management, Configuration Management, Implementation and Support using TFS on-premises and Azure DevOps. I have invested in gaining DevOps knowledege to expertise with Cloud Computing providers namely Microsoft Azure and Amazon Web Services in recent years. I am very positive to learn and adapt emerging technologies to client’s environment.

Microsoft Certified: Azure Administrator Associate

Microsoft Certified: Azure DevOps Engineer Expert

DevOps Engineer Certificate Program | Transcript 

OTP-AWSD5: AWS IoT: Developing and Deploying an Internet of Things

[PCEP-30-01] PCEP – Certified Entry-Level Python Programmer

Quotes I Like

"Failure will never overtake me if my determination to succeed is strong enough."  - Dr. APJ. Abdul Kalam

"Always be yourself, express yourself, have faith in yourself, do not go out and look for a successful personality and duplicate it." - Bruce Lee

"Technology is just a tool. In terms of getting the kids working together and motivating them, the teacher is the most important." - Bill Gates

"Innovation distinguishes between a leader and a follower." - Steve Jobs

CategoryList

Disclaimer

The information provided here is based on my expreriences, troubleshooting and online/offline findings. It can be used as is on your own risk without any warranties and I impose no rights.