首页 > 其他分享 >zabbix基础

zabbix基础

时间:2022-08-23 17:34:55浏览次数:91  
标签:mem 基础 free zabbix 内存 监控 root

zabbix监控入门

为什么做监控

企业中:

1.系统的监控:实际上是对系统不间断的实时监控

2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是
需要能实时看到当前系统的状态,是正常、异常、或者故障。

3.保证服务可靠性安全性:我们监控的目的就是要保证
系统、服务、业务正常运行

4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收
到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)

监控软件

  • CACTI网络监控

    • 官网TP
  • Naigos

    • 官网TP
  • zabbix分布式监控

  • open-falcon

    • 官网TP
  • promtheus

    • 官网TP
  • 天兔

    • 官网TP

面试问题

面试官:你们公司监控是如何做的?
监控软件我们使用的是zabbix,我们监控在不同的维度

  • 硬件层面 DELL R710 R720 R730

    • 如果不使用Dell的idrac那就使用zabbix的ipmi接口监控硬件

    1.CPU温度

    2.风扇转速

    3.磁盘是否损坏

    4.CMOS电池电量

    5.内存是否损坏

  • 系统层面

    • 内存

      1.内存使用率

      2.缓冲区

      3.缓存区

      4.堆

      5.栈

    • CPU

      1.CPU使用率

      2.CPU的负载

      3.CPU核心数线程

    • 磁盘

      1.磁盘使用率

      2.磁盘大小

      3.磁盘io

  • 网络层面

    • 网卡接口
    • 网卡流量
    • 交换机
    • 路由器
  • 应用层面

    • nginx

      1.进程

      2.端口

      3.网站访问

    • MySQL

      1.进程

      2.端口

      3.主从复制

      4.SQL读写速率

      5.是否可以登录

      6.innodb

      7.缓存

      8.表空间

      9.慢查询

    • Tomcat

      • JMX

        1.老年代

        2.新生代

        3.永久代

      • 垃圾回收

      • full-gc

      • 进程

      • 端口

      • 网站是否可以访问

    • Redis

      • 进程
      • 端口
      • 连接状态
      • 主从复制 info
      • 集群状态
      • key,缓存
        • 缓存穿透
        • 缓存击穿
        • 缓存雪崩
    • NFS、GFS(集群式的NFS)、Ceph、FastDFS

      • 进程
      • 挂载情况
      • 数据同步
    • PHP

      • 进程
      • 端口
      • 网站访问情况
      • PHP info
    • 业务层面

      • 代码
      • 接口

    单机监控命令

    CPU监控命令

    # 负载
    [root@zabbix6 ~]# w
     21:22:15 up  4:33,  3 users,  load average: 0.00, 0.01, 0.05
    
    # CPU
    [root@zabbix6 ~]# top -n 1
    
    # 美化的top
    [root@zabbix6 ~]# yum install -y htop
    [root@zabbix6 ~]# htop
    
    # glances
    [root@zabbix ~]# yum install -y glances
    [root@zabbix ~]# glances
    
    # uptime
    [root@zabbix ~]# uptime 
     21:25:57 up  4:33,  1 user,  load average: 0.00, 0.01, 0.05
    
    # lscpu
    [root@zabbix ~]# lscpu 
    [root@zabbix ~]# cat /proc/cpuinfo 
    

    不管用什么命令监控,查看CPU,我们都必须了解,系统的用户态和内核态

%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us:用户态	跟用户操作有关35%
sy:内核态	跟内核的处理65%
id:cpu空闲

当我们执行一个命令的时候,很快能出来结果,但是有多少人知道,这个很快,他都占用了哪些时间呢?
[root@zabbix ~]# time ls
anaconda-ks.cfg  host_ip.sh

real	0m0.001s
user	0m0.001s
sys	0m0.000s

监控内存

# free
[root@zabbix ~]# free -g

[root@zabbix ~]# free -m

[root@zabbix ~]# free -h

[root@zabbix ~]# top

[root@zabbix ~]# glances

[root@zabbix ~]# htop

[root@zabbix ~]# lsmem 

[root@zabbix ~]# cat /proc/meminfo

如何查看单个进程占用的内存?

# 进程占用内存的公式
pmem = VmRSS / MemTotal * 100
process mem = 虚拟内存 / 总内存 * 100

Python脚本获取进程使用内存情况

[root@zabbix ~]# vim men.py
#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
# 收集程序所占用的物理内存大小,占所有物理内存的比例
# Python: 2.7.6

import sys
import os
from subprocess import Popen,PIPE

def get_pid(program):
    '获取目标程序的PID列表'
    p = Popen(['pidof',program],stdout=PIPE,stderr=PIPE)
    pids,stderrput = p.communicate()
#     pids = p.stdout.read()  #这种方法也是可以的
#     这里也可以对stderrput来进行判断
    if pids:
        return pids.split()
    else:
        raise ValueError

def mem_calc(pids):
    '计算PIDs占用的内存大小'
    mem_total = 0
    for pid in pids:
        os.chdir('/proc/%s' % pid)
        with open('status') as fd:
            for line in fd:
                if line.startswith('VmRSS'):
                    mem = line.strip().split()[1]
                    mem_total += int(mem)
                    break
    return mem_total


def mem_percent(mem):
    '计算程序内存占用物理内存的百分比'
    with open('/proc/meminfo') as fd:
        for line in fd:
            if line.startswith('MemTotal'):
                total = line.strip().split()[1]
        percent = (float(mem)/int(total)) * 100
    return percent


def main():
    try:
        program = sys.argv[1]
        pids = get_pid(program)
    except IndexError as e:
        sys.exit('%s need a Program name ' % __file__)
    except ValueError as e:
        sys.exit('%s not a Process Name or not Start' % program )
    mem_total = mem_calc(pids)
    percent = mem_percent(mem_total)
    return program,mem_total,percent

if __name__ == '__main__':
    program,mem_total,mem_percent=main()
    print('进程名称:%s\n物理内存为:%s\n百分比为:%.2f%%'% (program,mem_total,mem_percent))

[root@zabbix ~]# python men.py  zabbix_server
进程名称:zabbix_server
物理内存为:132304
百分比为:14.23%

监控磁盘命令

# df
[root@zabbix ~]# df -i

[root@zabbix ~]# df -h

[root@zabbix ~]# df -ih

# iotop查看进程对磁盘的使用情况,熊吞吐量情况
[root@zabbix ~]# iotop 

# 查看磁盘io的吞吐量
-d:指定多久出一次结果 单位是秒
-m:指定出几次结果

[root@zabbix ~]# iostat -dm 1 10

[root@zabbix ~]# yum install -y dstat

[root@zabbix ~]# dstat -cdngy

[root@zabbix ~]# glances

[root@zabbix ~]# lsblk

# 磁盘开机自动挂载
[root@zabbix ~]# vim /etc/fstab

# 创建一块新磁盘
[root@zabbix ~]# dd < /dev/zero > /disk1 bs=1024K count=5

# 格式化
[root@zabbix ~]# mkfs.ext4 -i 5120 /disk

# 挂载
[root@zabbix ~]# mount -t ext4 -o loop /disk1 /opt/cipan1/

# 查看
[root@zabbix ~]# df -h
/dev/loop0               3.9M   53K  3.5M   2% /opt/cipan1

# 查看UUID
[root@zabbix ~]# blkid /dev/loop0
/dev/loop0: UUID="0df73f10-d16e-4b24-8cf4-bc2fc51662eb" TYPE="ext4"

# 添加UUID
[root@zabbix-server ~]# vim /etc/fstab
UUID=b2503fb9-fc5e-47fc-b86a-d171a5fbf689 /opt/cipan1 ext4 defaults
0 0 

网络监控命令

# glances

# iftop

# nethogs
[root@zabbix ~]# yum install -y nethogs
[root@zabbix ~]# nethogs 

# ifconfig
[root@zabbix ~]# watch ifconfig

# 路由
[root@zabbix ~]# route -n

TCP11种状态监控命令

# netstat
# 查看当前服务器的所有应用TCP状态
[root@zabbix ~]# netstat -an

[root@zabbix ~]# netstat -an|awk '/^tcp/ {print $NF}'|sort|uniq -c

[root@zabbix ~]# netstat -an|awk '/^tcp/ {++state[$NF]} END {for(key in state) > print key," \t" ,state[key]}'

生产场景需求

如何每1分钟监控当前系统的内存使用状态,如果可用低于100MB则发送邮件。同时打印当前还剩余多少内存
1.如何获取内存的状态信息 free -m
2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'

[root@web02 ~]# vim free.sh
#!/bin/bash
while true;do
free_av=$(free -m|awk '/^Mem/{print $NF}')
Hostname=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
if [ $free_av -lt 100 ];then
echo "$Date: ${Hostname},内存低于100MB,还有${free_av}MB内存可用"
fi
sleep 2
done
[root@web02 ~]# sh free.sh
2018-10-12: web02_,内存低于100MB,还有20MB内存可用
2018-10-12: web02_,内存低于100MB,还有6MB内存可用
2018-10-12: web02_,内存低于100MB,还有5MB内存可用

系统的oom

# 关闭swap
[root@zabbix ~]# swapoff -a

随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生oom(outof memory)

1.当系统内存不足时就会大量使用swap(虚拟内存)
2.当系统大量使用swap的时候,系统会特别卡
注意:有时可能内存还有剩余300M或者500M,但是swap依然被使用

[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
[root@web02 ~]# tail -f /var/log/messages

使用脚本监控nginx

前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警

#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" [email protected]
fi

快速监控一台主机

# 查看服务端的版本
[root@zabbix ~]# zabbix_server -V
zabbix_server (Zabbix) 5.0.26

# 安装对于版本的agent客户端
[root@web01 ~]# yum install -y zabbix-agent-5.0.26
[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.26-1.el7.x86_64.rpm

# 修改配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.61
ServerActive=172.16.1.61
Hostname=web01

# 启动服务
[root@web01 ~]# systemctl start zabbix-agent.service 

# 检查端口
[root@web01 ~]# netstat -lntup|grep 10050


添加基础模板



绿了即可

标签:mem,基础,free,zabbix,内存,监控,root
From: https://www.cnblogs.com/wangchengww/p/16617138.html

相关文章

  • python基础——while循环
    while循环语法while条件:条件成立重复执行的代码1条件成立重复执行的代码2......应用#计算1-100累加和i=1result=0whilei<=100:resu......
  • python基础——变量 数据类型 运算符 格式化 if语句复习
    拓展+复习:1.input(’'你要输入的内容')--输入2.print('你要输入的内容')--输出/打印3.注释多行,单行多行注释”“”“”“''''''#ctrl+/4.变量的定义定义变量的......
  • 01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
    引入JS#react开发JSreact.development.js#reactdom渲染JSreact-dom.development.js#jsx语法转换JSbabel.min.js#参数传值校验JSprop-types.jsJSX语法#......
  • JAVA基础--案例课程--2022年8月23日
    第一节 买飞机票  packagecom.flowerDance.cases;importjava.util.Scanner;publicclassticketingSystem{publicstaticvoidmain(String[]args){......
  • JS基础点
    JS的特点解释型语言:不用编译直接运行类似于C和Java的语法结构动态语言:可以保存任意类型的数据基于原型的面向对象script标签js代码需要编写到script标签中......
  • AcWing算法基础课---第一讲基础算法---05位运算
    ###整数n的二进制数的第k位数```n>>k&1```###lowbit运算```lowbit(x)x&(~x+1)=x&(-x)```###AcWing801.二进制中1的个数```#include<iostream>usingn......
  • Java语言基础
     writeonce、runanywhereJDK:Java开发者工具JRE:Java运行环境JVM:Java虚拟机Hello,world!下载jdk,配置环境新建文件夹存放代码,新建后缀名为.java的文件......
  • HTML基础(一):基本认知
    基本认知认识网页网页由哪些部分组成文字、图片、音频、视频、链接前端代码是通过什么软件转换成用户眼中的页面通过浏览器转化(解析和渲染)成用户看到的网页渲染引......
  • python基础——数据转换与运算符
    数据转换转换数据类型的作用input()接收用户输入的数据都是字符串类型,想得到整型该如何操作?转换数据类型即可,即将字符串类型转换成整型转换数据类型的函数函数说......
  • 基础之 - python数字转换为字符串
     问题:当需要将数字和字符串相加时,会报如下  解决:#1、数字转字符串a=12b='13'#1.1字符串格式化运算符#c='%d'%(a)+b#1.2使用str()函数#......