DevOps
Hiển thị các bài đăng có nhãn DevOps. Hiển thị tất cả bài đăng

Why every DevOps engineer says: Learn Linux first

Why does every senior DevOps engineer tell you: Learn Linux first?

Before Kubernetes, before AWS, before Terraform… learn Linux. Here’s why 👇

Because no matter how shiny the cloud console looks, every outage eventually drags you down to the command line.

1. Kubernetes Pod failing? → You’ll debug with kubectl exec and land in Linux.

2. Pipeline broken? → File permissions, symlinks, or shell quirks.

3. High CPU alert? → top, iostat, vmstat — Linux tools, not AWS dashboards.

4. Disk full at 2 AM? → du -sh, df -h, lsof | grep deleted.

The reality: AWS UI can help you start. Python scripts can make you look smart.

But only Linux will save you when prod is burning.

If you’re starting DevOps, learn these first:

1. grep, awk, sed → text wrangling

2. ps, lsof, strace → process forensics

3. netstat, ss, tcpdump → network truth serum

4. systemctl, journalctl → service lifelines


Everything else in DevOps - Kubernetes, Terraform, CI/CD - is built on top of Linux.


Skip this step, and you’ll always feel like an imposter.

If you want to be taken seriously as a DevOps engineer, Learn Linux first. Everything else comes later.

⭕️ If this helps, consider a repost

#LearnLinux #DevOps #ZeroToDevOps #SRE #InfraThrone #DevOps



Linux Real-Time Interview Questions (Advanced)


In real Linux/DevOps interviews, you are NOT judged by

how many commands you remember…

You are judged by how you THINK during production issues.

This poster covers real-world scenarios like:

• High load but CPU idle

• Disk space not freeing

• Zombie processes

• OOM killer issues

• Cron & network failures

💡 Interview Tip:

Network Pinger - Ping it

Network Pinger - Ping it

A simple command-line tool to ping a single IP address or a range of IP addresses to check their availability.

Features

  • Ping a single IP address.
  • Ping a range of IP addresses.
  • Display results in a user-friendly format.
  • Export data to excel.

Requirements

  • Python 3.x
  • Required libraries: requirements.txt

Installation

  1. Clone the repository:


   git clone https://github.com/cuongitl/pyNetworkPinger.git
   cd pyNetworkPinger

  1. Install the required libraries:


   pip install -r requirements.txt

Usage

Quick mode

Ping a Single IP Address

To ping a single IP address, run the following command:

python pingit.py <IP_ADDRESS>

Replace <IP_ADDRESS> with the actual IP address you want to ping.

Ping a Range of IP Addresses

Install NetBox under 10 Minutes or less?

 

What's Netbox? Why Netbox


This is a note; I'll write more fully later!

Install NetBox under 10 Minutes or less?

All steps are automated 100% by Python!

1. preparing_data: upload on config files to target host.

2. environment_setup: Installing Docker and Docker-Compose

3. Deploy containers: netbox, nginx, postgresql, redis, rq_worker...

4. Create new createsuperuser (Optional)

Details:

1.Upload config files:

- .env

- docker-compose.yml

- docker_install.sh

- netbox_full_setup.sh

- nsteam.it.crt

- nsteam.it.key


2. Installing Docker and Docker-Compose

- by docker_install.sh


3. Deploy docker containers: netbox, nginx, postgresql, redis, rq_worker...

- by netbox_full_setup.sh

4. Create new createsuperuser (Optional)

- by python code.




Shell Script to auto install Docker on Linux


#!/bin/bash
:: Filename: docker_install.sh
:: Modified: 2025-05-02
:: Purpose: Quick install Docker on RHEL system.

# Built with ❤️ by Cuongitl (https://infra.lecuong.info)
# Reset color
RESET='\033[0m'

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'

# Update the system packages
echo -e "${YELLOW}Updating system packages...${RESET}"
sudo dnf update -y || { echo -e "${RED}Error updating system packages. Exiting.${RESET}"; exit 1; }

# Install the necessary packages
echo -e "${YELLOW}Installing necessary packages...${RESET}"
sudo dnf install -y dnf-utils || { echo -e "${RED}Error installing dnf-utils. Exiting.${RESET}"; exit 1; }

# Add the Docker repository
echo -e "${YELLOW}Adding Docker repository...${RESET}"
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo || { echo -e "${RED}Error adding Docker repository. Exiting.${RESET}"; exit 1; }

# Install Docker
echo -e "${YELLOW}Installing Docker...${RESET}"
sudo dnf install docker-ce docker-ce-cli containerd.io -y || { echo -e "${RED}Error installing Docker. Exiting.${RESET}"; exit 1; }

# Start the Docker service
echo -e "${YELLOW}Starting Docker service...${RESET}"
sudo systemctl start docker || { echo -e "${RED}Error starting Docker service. Exiting.${RESET}"; exit 1; }

# Enable the Docker service to start automatically on system boot
echo -e "${YELLOW}Enabling Docker service to start automatically on system boot...${RESET}"
sudo systemctl enable docker || { echo -e "${RED}Error enabling Docker service. Exiting.${RESET}"; exit 1; }

# Verify the Docker installation
echo -e "${YELLOW}Verifying Docker installation...${RESET}"
sudo docker --version || { echo -e "${RED}Error verifying Docker installation. Exiting.${RESET}"; exit 1; }

# Install Docker Compose
echo -e "${YELLOW}Installing Docker Compose...${RESET}"
sudo curl -L "https://github.com/docker/compose/releases/download/v2.35.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose || { echo -e "${RED}Error downloading Docker Compose. Exiting.${RESET}"; exit 1; }
sudo chmod +x /usr/local/bin/docker-compose || { echo -e "${RED}Error making Docker Compose executable. Exiting.${RESET}"; exit 1; }

# Verify the Docker Compose installation
echo -e "${YELLOW}Verifying Docker Compose installation...${RESET}"
if [ -x "/usr/local/bin/docker-compose" ]; then
    echo -e "${GREEN}Docker Compose installed successfully.${RESET}"
else
    echo -e "${RED}Error verifying Docker Compose installation. Exiting.${RESET}"
    exit 1
fi

# (Optional) Create a symlink for easier access
echo -e "${YELLOW}Creating symlink for Docker Compose...${RESET}"
if [ ! -L "/usr/bin/docker-compose" ]; then
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose || { echo -e "${RED}Error creating symlink for Docker Compose. Exiting.${RESET}"; exit 1; }
else
    echo -e "${CYAN}Symlink for Docker Compose already exists. Skipping.${RESET}"
fi

# Verify the Docker Compose version
echo -e "${YELLOW}Verifying Docker Compose version...${RESET}"
docker-compose --version || { echo -e "${RED}Error verifying Docker Compose version. Exiting.${RESET}"; exit 1; }

echo -e



https://gist.github.com/cuongitl/docker-install.sh






POWERSHELL SCRIPT TO AUTOMATE BACKUP OF A FILE AND APPEND THE DATE WITH SUFFIX

PowerShell script is to automate the process of copying a file  from a source directory to a destination directory

Purpose of the Script 

The purpose of this PowerShell script is to automate the process of copying a file (abc.xlsx) from a source directory to a destination directory, ensuring that: 

  1.  The source file exists before attempting any further actions. 
  2. The destination directory exists or is created if it doesn't. 
  3. No overwriting of existing files occurs in the destination directory. If a file with the same name already exists, the script appends a numeric counter (-1, -2, etc.) to the filename to ensure that each copied file has a unique name. 
  4. Safe file operations are ensured by checking for file existence and automatically generating a unique file name when necessary. 

Main Use Case:

 This script is useful when automating tasks like backing up files, copying reports, logs, or other documents, where the filenames may need to be adjusted based on the date or incremented to avoid conflicts with existing files. 

It ensures that the latest copy of the file is always transferred to the destination directory without any risk of overwriting existing files. 

 In summary, this script is designed to automate the process of file copying, making it safe, efficient, and organized, especially in environments where files with the same name (but potentially different versions) need to be handled daily or periodically.

backupfile.ps1

IT Infrastructure Monitoring with Zabbix - Part02

Configure Zabbix Agent: Active vs. Passive ?


Zabbix Agent is installed on servers or client-side devices. Thereby, Zabbix Agent will collect the necessary information from the client computer that needs to be monitored, checked and collected data related to CPU, Memory, Disk and Network interface… or other administrator requirements, then send the results back to Zabbix Server for storage and visualization. It runs on any modern operating system and is very flexible because its functionality can be extended with scripts and modules.
 
First, you need to understand about Active vs Passive Zabbix Agent mode.

See this:

Active vs Passive agent connection

When using a Zabbix agent in active mode, it will connect to the Zabbix server via port 10051 to retrieve configuration and send data. This is a great feature that allows an active Zabbix agent to work behind the firewall and to offload the Zabbix server in large environments.

On the other hand, if you use a Zabbix agent in passive mode, Zabbix server will initiate a connection via port 10050 and retrieve data from the agent. The Zabbix server will do this for every metric (item) every few minutes – which is very inefficient! Because of this, active mode is more recommended.

An additional advantage of the Zabbix agent in active mode is that it can read logs from the device and that is not possible if the Zabbix agent is used in passive mode.

Because, Zabbix-agent is quite easy to install so I won't mention it here.


In this tutorial, I will show you how to configure  Zabbix agent and add host to monitoring system.

1/ Configure Zabbix agent on Linux OS:

Automation configure Zabbix Agent with bash script: