Today, we are going to explain how to create Linux inventory using simple shell script. You don't have to visit each and every servers for getting the system details.
- Create file to store server name
centOS01
node01
node02
[root@centOS01 ~]#
- Create script call data-collection.sh to generate data and store the information in /tmp/server_check_list file on servers. It will store below data of the servers in file
HOSTNAME
, IPDETAILS ,DNS ,OS Version, SELINUX ,FIREWALLD ,KERNEL ,NTP ,CHRONYD, MAIL, NFS,
CIFS, MEMORY(KB), SWAP(KB), CPU, DISK-COUNT, PARTITION-COUNT, DISKS-DETAIL, PARTITION-DETAIL,
MACHINE
[root@centOS01 ~]# cat data-collection.sh
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 26-June-2020
# Modified Date: 26-June-2020
# Author : Vallabh Darole
# START #
#echo -n >/tmp/server_check_list
RHOSTNAME=`hostname`
IPDETAILS=`hostname -I`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
SELINUX=`getenforce`
FIREWALLD=`if ps -ef | grep firewalld | grep -v grep >/dev/null ; then echo 'Firewalld OK' ; else echo 'Firewalld KO' ; fi`
KERNELV=`uname -r`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
DISKS=`lsblk | grep disk | grep sd | awk '{printf $1"="$4 " "}'`
PARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1"="$2"="$3"="$7 " "}'`
CDISKS=`lsblk | grep disk | grep sd | wc -l`
CPARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | wc -l`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}'`
CPU=`cat /proc/cpuinfo | grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
MACHINE=`dmidecode | grep -A1 "System Information" | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
echo "$RHOSTNAME,$IPDETAILS,$DNSSERVERS,$OS,$SELINUX,$FIREWALLD,$KERNELV,$NTP,$CHRONYD,$MAIL,$NFS,$CIFS,$MEMORY,$SWAP,$CPU,$CDISKS,$CPARTITION,$DISKS,$PARTITION,$MACHINE" >> /tmp/server_check_list
#END#
[root@centOS01 ~]#
- The below script will copy the data-collation.sh script on all servers in /tmp folder. Then it will execute the script and create file server_check_list" on all servers in /tmp directory. Then it going to read the file /tmp/server_check_list from all server and create file /tmp/server_check_list.csv file. It will also send email with attached server_check_list.csv file. if you do not received the mail you can download the file /tmp/server_check_list.csv from servers which you had executed the script.
[root@centOS01 ~]# cat inventory.sh
#!/bin/bash
# Purpose: Copy & Execute data collection script.
# Version: 1.0
# Created Date: 26-June-2020
# Modified Date: 26-June-2020
# Author : Vallabh Darole
# START #
echo "Enter your email ID"
read EMAIL
echo -n >/tmp/server_check_list.csv
echo "HOSTNAME ,IPDETAILS,DNSSERVERS,OS,SELINUX,FIREWALLD,KERNELV,NTP,CHRONYD,MAIL,NFS,CIFS,MEMORY(KB),SWAP,CPU,DISK-COUNT, PARTITION-COUNT,DISKS-DETAIL,PARTITION-DETAIL,MACHINE" >> /tmp/server_check_list.csv
for i in `cat /root/server_list`
do
echo $i
scp data-collection.sh $i:/tmp
timeout 5 ssh $i /tmp/data-collection.sh
timeout 5 ssh $i cat /tmp/server_check_list >>/tmp/server_check_list.csv
timeout 5 ssh $i rm /tmp/server_check_list
timeout 5 ssh $i rm /tmp/data-collection.sh
done
DATE=`date`
echo -n "Please find the server inventory create for servers " >/tmp/MESSAGE
cat /root/server_list >> /tmp/MESSAGE
echo `cat /tmp/MESSAGE` | mailx -s "Inventory list create on $DATE" -a "/tmp/server_check_list.csv" $EMAIL
# END #
[root@centOS01 ~]#
- You will receive below email on you email ID provided.
- Below is inventory file create from script.
For result you can see the below video.
- You will receive below email on you email ID provided.
- Below is inventory file create from script.
For result you can see the below video.
ATR Script for RHEL7
# vi inventory.sh
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #
DATE=`date +"%d-%B-%Y"`
echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if systemctl status firewalld > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi`
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi`
WALINUX=`rpm -qa | grep WALinuxAgent`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk | grep disk | grep sd | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo | grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information" | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep link | wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`
echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv
echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$ MACHINE , $SERVICE ">>server_check_list.csv
cat server_check_list.csv
# END #
ATR Script for RHEL6
# vi inventory.sh
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #
DATE=`date +"%d-%B-%Y"`
echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if service iptables status > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi`
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi`
WALINUX=`rpm -qa | grep WALinuxAgent`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`echo "CHRONYD KO"`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk | grep disk | grep sd | wc -l`
CPARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | wc -l`
PARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo | grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information" | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep "link src"| wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`
echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv
echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv
cat server_check_list.csv
# END #
ATR Script for RHEL5
# vi inventory.sh
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #
DATE=`date +"%d-%B-%Y"`
echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if service iptables status > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi`
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi`
WALINUX=`rpm -qa | grep WALinuxAgent`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
`echo 'CHRONYD KO'`
MAIL=`if service sendmail status > /dev/null ; then echo 'SENDMAIL OK' ; else echo 'SENDMAIL KO' ; fi`
CDISKS=`fdisk -l | grep Disk | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo | grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information" | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep "link src"| wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`
echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv
echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv
cat server_check_list.csv
# END #
ATR Script for UBUNTU
# vi inventory.sh
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #
DATE=`date +"%d-%B-%Y"`
echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if systemctl status ufw > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`disabled`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi`
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi`
WALINUX=`NO WALINUX`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk | grep disk | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo | grep "processor" | wc -l`
OS=`lsb_release -d`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information" | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep link | wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`
echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv
echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv
cat server_check_list.csv
# END #
No comments:
Post a Comment