安装zabbix客户端脚本

安装zabbix客户端脚本
#!/bin/bash

# get network ip addr function
function getIP()
{
    NET=$1
    if [ "$NET" = "" ]; then
        NET="eth0"
    fi
    IP=""
    if [ $(ifconfig | grep "$NET" | wc -l) -gt 0 ]; then
        IP=$(ifconfig $NET | grep 'inet addr:' | awk -F: '{print $2}' | awk '{print $1}')
    fi
    echo $IP
}

# get IP segment function
function getSegment()
{
    IP_ADD=$1
    N=$2
    echo $(echo $IP_ADD | cut -d. -f$N)
}

ETH0_IP=$(getIP eth0)
ETH1_IP=$(getIP eth1)

IP_ADDR=""
if [ "$ETH0_IP" != "" ]; then
    if [ "$(getSegment $ETH0_IP 1)" = "10" ]; then
        IP_ADDR=$ETH0_IP   
    fi
fi   
if [ "$ETH1_IP" != "" ]; then
    if [ "$(getSegment $ETH1_IP 1)" = "10" ]; then
        IP_ADDR=$ETH1_IP   
    fi
fi

LOCAL_IP=$IP_ADDR
LOCAL_IP_FIELD_2=$(getSegment $LOCAL_IP 2)
case "$LOCAL_IP_FIELD_2" in
    1)
        SERVER_IP="10.2.0.44"
        ;;
    2)
        SERVER_IP="10.2.0.44"
        ;;
    3)
        SERVER_IP="10.3.0.246"
        ;;
    *)
        SERVER_IP=""
        echo "ip addr is error!"
        exit
esac
   

groupadd zabbix
useradd -g zabbix -s /sbin/nologin  -M zabbix

cd /usr/local/src
ls  zabbix-2.2.3.tar.gz || wget  http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX Latest Stable/2.2.3/zabbix-2.2.3.tar.gz
tar zxvf zabbix-2.2.3.tar.gz
cd zabbix-2.2.3
./configure --prefix=/usr/local/zabbix --enable-agent
make install


cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d
sed -i 's/BASEDIR=\/usr\/local/BASEDIR=\/usr\/local\/zabbix/g' /etc/init.d/zabbix_agentd
chkconfig --add zabbix_agentd
chkconfig zabbix_agentd on

sed -i "s/^Server=127.0.0.1/Server=$SERVER_IP/g" /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i "s/^ServerActive=127.0.0.1/ServerActive=$SERVER_IP/" /usr/local/zabbix/etc/zabbix_agentd.conf
sed -i "s/^# ListenIP=0.0.0.0/ListenIP=$LOCAL_IP/" /usr/local/zabbix/etc/zabbix_agentd.conf

/etc/init.d/zabbix_agentd start


添加自定义的zabbix监控脚本

#!/bin/bash

ZABBIX_AGETNTD_CONF="/usr/local/zabbix/etc/zabbix_agentd.conf"
ZABBIX_SCRIPT_DIR="/usr/local/zabbix/scripts"

# modify UnsafeUserParameters=1
sed -i "/# UnsafeUserParameters=0/a\UnsafeUserParameters=1" $ZABBIX_AGETNTD_CONF

# if not exits script dir, then create script dir
if [ ! -d "$ZABBIX_SCRIPT_DIR" ]; then
        mkdir -p "$ZABBIX_SCRIPT_DIR"
fi


########################################### add check_tcp script ################################################
CHECK_SCRIPT_FILE_NAME="check_tcps.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

STAT=""

case "$1" in
    ESTABLISHED)
        STAT='ESTABLISHED'
        ;;
    TIME-WAIT)
        STAT='TIME-WAIT'
        ;;
    *)
        exit 1
esac

NUM=$(/usr/sbin/ss -a state $STAT | wc -l)
echo $NUM
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1" $ZABBIX_AGETNTD_CONF
fi


########################################### add check_cpu_usage script ################################################
CHECK_SCRIPT_FILE_NAME="check_cpu_usage.py"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/usr/bin/env python

# http://blog.chinaunix.net/uid-108431-id-3359082.html

from __future__ import division
import os
import re
import time
import sys

cpu = "cpu"
if(len(sys.argv)>1):
    cpu = cpu+sys.argv[1]


# define get cpu_total_time and cpu_busy_time function
def get_times(cpu):
    shell_cmd = "cat /proc/stat | sed -n '/^"+cpu+" /p'"
    stat_str = os.popen(shell_cmd).read().strip()
    stat_list = stat_str.split()

    # if the cpu core is not exists
    if (len(stat_list) != 10):
        return []

    cpu_total_time = int(stat_list[1]) + int(stat_list[2]) + int(stat_list[3]) + int(stat_list[4]) + int(stat_list[5]) + int(stat_list[7]) + int(stat_list[8]) + int(stat_list[9])
    cpu_busy_time = int(stat_list[1]) + int(stat_list[2]) + int(stat_list[3]) + int(stat_list[5]) + int(stat_list[7]) + int(stat_list[8]) + int(stat_list[9])
    return [cpu_total_time, cpu_busy_time]

res = get_times(cpu)
if(len(res) != 2):
    print 0
    exit(0)
cpu_total_time_1,cpu_busy_time_1 = res

time.sleep(1)

res = get_times(cpu)
cpu_total_time_2,cpu_busy_time_2 = res


# calculate the cpu usage
total = cpu_total_time_2 - cpu_total_time_1
busy = cpu_busy_time_2 - cpu_busy_time_1
print busy/total*100
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1" $ZABBIX_AGETNTD_CONF
fi

########################################### add check_redis script ################################################
CHECK_SCRIPT_FILE_NAME="check_redis.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

PARA="$1"":"
REDIS_PORT=$2
REDIS_CLI="/usr/local/redis/bin/redis-cli"

if [ "$REDIS_PORT" = "" ]; then
        REDIS_PORT=6379
fi
REDIS_INFO_COMMAND="$REDIS_CLI -p $REDIS_PORT  info"

ITEM=""
case $PARA in
    connected_clients:)
        ITEM="$PARA"
        ;;
    used_memory:)
        ITEM="$PARA"
        ;;
    used_memory_peak:)
        ITEM="$PARA"
        ;;
    latest_fork_usec:)
        ITEM="$PARA"
        ;;
    master_link_status:)
        ITEM="$PARA"
        ;;
    instantaneous_ops_per_sec:)
        ITEM="$PARA"
        ;;
    *)
        exit 1
esac

VAL=$($REDIS_INFO_COMMAND | awk -F:  '/^'$ITEM'/{print $2}')
echo $VAL
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1 \$2" $ZABBIX_AGETNTD_CONF
fi

########################################### add check_mongodb script ################################################
CHECK_SCRIPT_FILE_NAME="check_mongodb.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

PARA="$1"
PORT=$2
CLI="/usr/local/mongodb264/bin/mongostat"

if [ "$PORT" = "" ]; then
    PORT=27017
fi

RES=`$CLI --port $PORT -n 1 --noheaders | grep -v connected`

case "$PARA" in
    res)
        VAL=$(echo $RES | awk '{print $10}' | tr -d g | tr -d m)
        VAL=$(echo "scale=2;$VAL*1024*1024" | bc | awk -F. '{if(substr($2,1,1)>=5)$1+=1;print $1}')
        ;;
    total_mem)
        VAL=$(free -b | grep Mem: | awk '{print $2}')
        ;;
    conn)
        VAL=$(echo $RES | awk '{print $18}')
        ;;
    faults)
        VAL=$(echo $RES | awk '{print $11}')
        ;;
    locked)
        VAL=$(echo $RES | awk '{print $12}' | awk -F: '{print $2}' | tr -d '%')
        ;;
    flushes)
        VAL=$(echo $RES | awk '{print $7}')
        ;;
    *)
        exit 1
esac

echo $VAL
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1 \$2" $ZABBIX_AGETNTD_CONF
fi

########################################### add cpu_core_discovery script ################################################
CHECK_SCRIPT_FILE_NAME="cpu_core_discovery.py"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/usr/bin/env python
# coding: utf8
# discovery cpu cores


__author__ = 'zhaoruixiong'

import os,sys,json


shell_cmd = "cat /proc/stat | awk '/^cpu[0-9]+/{print $1}'"
cpu_str = os.popen(shell_cmd).read().strip()
core_list = cpu_str.split()

res = {}

a = []
for core in core_list:
    b = {'{#COREINDEX}':core.replace('cpu', '')}
    a.append(b)

res['data'] = a

print json.dumps(res)
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
    sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1" $ZABBIX_AGETNTD_CONF
fi

#restart zabbix agentd
/etc/init.d/zabbix_agentd restart









添加自定义的zabbix监控项脚本
#!/bin/bash

ZABBIX_AGETNTD_CONF="/usr/local/zabbix/etc/zabbix_agentd.conf"
ZABBIX_SCRIPT_DIR="/usr/local/zabbix/scripts"

# modify UnsafeUserParameters=1
sed -i "/# UnsafeUserParameters=0/a\UnsafeUserParameters=1" $ZABBIX_AGETNTD_CONF

# if not exits script dir, then create script dir
if [ ! -d "$ZABBIX_SCRIPT_DIR" ]; then
        mkdir -p "$ZABBIX_SCRIPT_DIR"
fi


########################################### add check_tcp script ################################################
CHECK_SCRIPT_FILE_NAME="check_tcps.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

STAT=""

case "$1" in
        ESTABLISHED)
                STAT='ESTABLISHED'
                ;;
        TIME-WAIT)
                STAT='TIME-WAIT'
                ;;
        *)
                exit 1
esac

NUM=$(/usr/sbin/ss -a state $STAT | wc -l)
echo $NUM
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1" $ZABBIX_AGETNTD_CONF
fi


########################################### add check_cpu_usage script ################################################
CHECK_SCRIPT_FILE_NAME="check_cpu_usage.py"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/usr/bin/env python

# http://blog.chinaunix.net/uid-108431-id-3359082.html

from __future__ import division
import os
import re
import time


# define get cpu_total_time and cpu_busy_time function
def get_times():
        stat_str = os.popen("cat /proc/stat | sed -n '1p'").read().strip()
        stat_list = stat_str.split()
        cpu_total_time = int(stat_list[1]) + int(stat_list[2]) + int(stat_list[3]) + int(stat_list[4]) + int(stat_list[5]) + int(stat_list[7]) + int(stat_list[8]) + int(stat_list[9])
        cpu_busy_time = int(stat_list[1]) + int(stat_list[2]) + int(stat_list[3]) + int(stat_list[5]) + int(stat_list[7]) + int(stat_list[8]) + int(stat_list[9])
        return [cpu_total_time, cpu_busy_time]

cpu_total_time_1,cpu_busy_time_1 = get_times()

time.sleep(1)

cpu_total_time_2,cpu_busy_time_2 = get_times()


# calculate the cpu usage
total = cpu_total_time_2 - cpu_total_time_1
busy = cpu_busy_time_2 - cpu_busy_time_1
print busy/total*100
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1" $ZABBIX_AGETNTD_CONF
fi

########################################### add check_redis script ################################################
CHECK_SCRIPT_FILE_NAME="check_redis.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

PARA="$1"":"
REDIS_PORT=$2
REDIS_CLI="/usr/local/redis/bin/redis-cli"

if [ "$REDIS_PORT" = "" ]; then
        REDIS_PORT=6379
fi
REDIS_INFO_COMMAND="$REDIS_CLI -p $REDIS_PORT  info"

ITEM=""
case $PARA in
        connected_clients:)
                ITEM="$PARA"
                ;;
        used_memory:)
                ITEM="$PARA"
                ;;
        used_memory_peak:)
                ITEM="$PARA"
                ;;
        latest_fork_usec:)
                ITEM="$PARA"
                ;;
        master_link_status:)
                ITEM="$PARA"
                ;;
        instantaneous_ops_per_sec:)
                ITEM="$PARA"
                ;;
        *)
                exit 1
esac

VAL=$($REDIS_INFO_COMMAND | awk -F:  '/^'$ITEM'/{print $2}')
echo $VAL
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1 \$2" $ZABBIX_AGETNTD_CONF
fi

########################################### add check_mongodb script ################################################
CHECK_SCRIPT_FILE_NAME="check_mongodb.sh"
CHECK_SCRIPT_FILE=$ZABBIX_SCRIPT_DIR"/"$CHECK_SCRIPT_FILE_NAME
SERVER_KEY_NAME=${CHECK_SCRIPT_FILE_NAME%.*}
SERVER_KEY_NAME=${SERVER_KEY_NAME//_/.}
cat > $CHECK_SCRIPT_FILE <<"EOF"
#!/bin/bash

PARA="$1"
PORT=$2
CLI="/usr/local/mongodb260/bin/mongostat"

if [ "$PORT" = "" ]; then
    PORT=27017
fi

RES=`$CLI --port $PORT -n 1 --noheaders | grep -v connected`

case "$PARA" in
    res)
        VAL=$(echo $RES | awk '{print $10}' | tr -d g | tr -d m)
        VAL=$(echo "scale=2;$VAL*1024*1024" | bc | awk -F. '{if(substr($2,1,1)>=5)$1+=1;print $1}')
        ;;
    total_mem)
        VAL=$(free -b | grep Mem: | awk '{print $2}')
        ;;
    conn)
        VAL=$(echo $RES | awk '{print $18}')
        ;;
    faults)
        VAL=$(echo $RES | awk '{print $11}')
        ;;
    locked)
        VAL=$(echo $RES | awk '{print $12}' | awk -F: '{print $2}' | tr -d '%')
        ;;
    flushes)
        VAL=$(echo $RES | awk '{print $7}')
        ;;
    *)
        exit 1
esac

echo $VAL
EOF
chmod 755 $CHECK_SCRIPT_FILE
# add UserParameter
REPEAT_COMM_NUM=$(grep -c "$CHECK_SCRIPT_FILE" $ZABBIX_AGETNTD_CONF)
if [ $REPEAT_COMM_NUM -eq 0 ]; then
        sed -i "/^# UserParameter=$/a\UserParameter=$SERVER_KEY_NAME[*], $CHECK_SCRIPT_FILE \$1 \$2" $ZABBIX_AGETNTD_CONF
fi


#restart zabbix agentd
/etc/init.d/zabbix_agentd restart




个别主机使用的脚本
监控redis
sed -i "/^# UserParameter=$/a\UserParameter=check.redis[*], /usr/local/zabbix/scripts/check_redis.sh \$1 \$2" /usr/local/zabbix/etc/zabbix_agentd.conf

#!/bin/bash

PARA="$1"":"
REDIS_PORT=$2
REDIS_CLI="/usr/local/bin/redis-cli"

if [ "$REDIS_PORT" = "" ]; then
        REDIS_PORT=6379
fi
REDIS_INFO_COMMAND="$REDIS_CLI -p $REDIS_PORT  info"

ITEM=""
case $PARA in
        connected_clients:)
                ITEM="$PARA"
                ;;
        used_memory:)
                ITEM="$PARA"
                ;;
        used_memory_peak:)
                ITEM="$PARA"
                ;;
        latest_fork_usec:)
                ITEM="$PARA"
                ;;
        master_link_status:)
                ITEM="$PARA"
                ;;
        instantaneous_ops_per_sec:)
                ITEM="$PARA"
                ;;
        *)
                exit 1
esac

VAL=$($REDIS_INFO_COMMAND | awk -F:  '/^'$ITEM'/{print $2}')
echo $VAL

监控mongodb
sed -i "/^# UserParameter=$/a\UserParameter=check.mongodb[*], /usr/local/zabbix/scripts/check_mongodb.sh \$1 \$2" /usr/local/zabbix/etc/zabbix_agentd.conf

#!/bin/bash

PARA="$1"
PORT=$2
CLI="/usr/local/mongodb260/bin/mongostat"

if [ "$PORT" = "" ]; then
    PORT=27017
fi

RES=`$CLI --port $PORT -n 1 --noheaders | grep -v connected`

case "$PARA" in
    res)
        VAL=$(echo $RES | awk '{print $10}' | tr -d g | tr -d m)
        VAL=$(echo "scale=2;$VAL*1024*1024" | bc | awk -F. '{if(substr($2,1,1)>=5)$1+=1;print $1}')
        ;;
    total_mem)
        VAL=$(free -b | grep Mem: | awk '{print $2}')
        ;;
    conn)
        VAL=$(echo $RES | awk '{print $18}')
        ;;
    faults)
        VAL=$(echo $RES | awk '{print $11}')
        ;;
    locked)
        VAL=$(echo $RES | awk '{print $12}' | awk -F: '{print $2}' | tr -d '%')
        ;;
    flushes)
        VAL=$(echo $RES | awk '{print $7}')
        ;;
    *)
        exit 1
esac

echo $VAL

监控elasticsearch
sed -i "/^# UserParameter=$/a\UserParameter=check.es[*], /usr/local/zabbix/scripts/check_es.py \$1" /usr/local/zabbix/etc/zabbix_agentd.conf

#!/usr/bin/env python
# coding: utf8
__author__ = 'zhaoruixiong'

import os,sys,urllib2,json
from pprint import pprint


server_ip = '10.2.0.48'
monitor_url = 'http://'+server_ip+':9200/_nodes/stats/jvm'

if(len(sys.argv)>1):
    monitor_item = sys.argv[1]
    if ((monitor_item != 'heap_used_in_bytes') and (monitor_item != 'heap_used_percent') and (monitor_item != 'heap_max_in_bytes')):
        print 0
        exit(0)
else:
    print 0
    exit(0)

item_val = 0
try:
    res = {}
    request = urllib2.Request(monitor_url)
    result = urllib2.urlopen(request)
    res = json.loads(result.read())
    nodes_dic = res['nodes']
    for (k,v) in nodes_dic.items():
        if (v['transport_address'].find(server_ip) > 0):
            item_val = v['jvm']['mem'].get(monitor_item, 0)
    print item_val

except urllib2.URLError as e:
    print 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值