go 运维,检测 web 服务状态

延续前面的代码,在运维的时候经常需要检测 web 服务的状态,可以在 web 中专门设置一个测试页面(可以查询下数据库,返回一个指定的值)

package main

//使用的包
import (
    "flag"
    "fmt"
    "io/ioutil"
    "log"
    "net"
    "net/http"
    "regexp"
)

//定义脚本的版本
const VERSION = "0.1.0"

//使用 flag 来定义命令输入的参数
var Input_protocol = flag.String("p", "tcp", "The protocol you want to check")

//定义检测 tcp 服务的脚本,用到 net 包
func tcp(url string) int {
    _, err := net.Dial("tcp", url)
    if err != nil {
        fmt.Println(err)
        return 0
    } else {
        return 1
    }
}

//定义检测 udp 服务的脚本,用到 net 包
func udp(url string) int {
    _, err := net.Dial("udp", url)
    if err != nil {
        fmt.Println(err)
        return 0
    } else {
        return 1
    }
}

//定义检测 http 服务的脚本,成功返回1,失败返回0
func chttp(url, checkword string) int {
    res, err := http.Get(url)
    if err != nil {
        //如果连接失败返回错误
        log.Fatal(err)
        return 0
    }

    //使用 ioutil 读取得到的响应
    robots, err := ioutil.ReadAll(res.Body)
    //关闭资源
    res.Body.Close()

    //失败返回原因
    if err != nil {
        log.Fatal(err)
        return 0
    }

    //调用 regexp 函数查找 checkword
    word, err := regexp.MatchString(checkword, string(robots))
    if err != nil {
        log.Println(err)
        return 0
    }
    if word {
        log.Printf("The `%s`  find in `%s`", checkword, url)
        return 1
    }
    log.Printf("The `%s`  not find in `%s`", checkword, url)
    return 0
}

func main() {
    flag.Parse()
    if flag.NArg() < 1 {
        useage := "使用示例: check -p tcp 192.168.7.26:22 或者 check -p udp 192.168.7.23:123 或者 check -p http http://dockerpool.com  dockerpool"
        fmt.Println(useage)
        return
    }
    p := *Input_protocol
    switch {
    case p == "tcp":
        r := tcp(flag.Args()[0])
        fmt.Println(r)
    case p == "udp":
        r := udp(flag.Args()[0])
        fmt.Println(r)
    case p == "http":
        chttp(flag.Args()[0], flag.Args()[1])
    }
}

使用示例:

$ check -p http http://dockerpool.com  dockerpool
2015/01/08 10:38:53 The `dockerpool`  find in `http://dockerpool.com`
$ check -p tcp www.sina.com:80
1
$ check -p tcp www.sina.com:88
dial tcp 61.172.201.20:88: connection refused
0
时间: 2024-09-29 01:04:28

go 运维,检测 web 服务状态的相关文章

应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

应用软件学习总结 目录 SVN部署及使用 一健安装Zabbix Ansible自动化运维工具安装及使用 PPTP服务器端部署到客户端连接使用 fail2ban安装配置 kvm安装使用 LVS+Keepalived搭建 Keepalived+LVS维护技巧与调优 LVS概念类型及三种工作模式和十种调度算法介绍 redis单实例.多实例.主从同步实战 整合Nginx和Tomcat Nginx服务器的搭建 安装LAMP 一健安装LNMP 生产环境Nginx配置文件 Apache安装配置解析 Rsync

shell 实现监控Web服务状态

使用shell 实现监控Web服务状态 原理:下载网站,并把输出写入 /dev/null,如果该命令执行结果成功(返回0)打印成功提示,如果下       载失败,这再下载一次,如果还是失败,就打印失败 脚本如下 [[email protected] ~]# cat checkurl.sh  #!/bin/bash CheckUrl(){ timeout=5 fails=0 success=0 while true   do     wget --timeout=$timeout --tries

IT英文桌面运维驻场服务实施合伙人招募启事

IT英文桌面运维驻场服务实施合伙人招募启事 派士科技公司将在北上广深和杭州长期招募IT英文桌面驻场服务实施合伙人,与传统的IT外包服务公司雇佣.分包或下包方式不同,我们采取的合伙方式特点如下,可以理解成IT服务行业的"联产承包责任制": 1.客户群:中国大陆外企客户:2.项目来源: 派士科技提供长期合同的服务项目,合作伙伴只需专注现场的服务交付:3.合伙人定义:具有能为外企客户按照合同履行驻场IT服务的各级别工程师.现场服务Leader:4.合伙人收入:工作在第一线的合伙人理应得到服务

走进自动化运维之Ansible服务部署,附带(参数及模块)详解!

何为Ansible: 简单的自动化运维管理工具,不需要配置代理工具,基于Python研发. Ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. 自动化运维工具"三剑客": 工具 开发语言 结构 配置文件格式 运行任务 Ansible Python 无 YAML 支持命令行 SaltStack Python C/S YAML 支持命令行 Puppet Ruby C/S Ruby语法格式 通过模块实现 a

运维监控工具--pigoss服务于奥瑞金包装股份有限公司

文章摘自pigoss官网 http://www.netistate.com  如需转载,请标明出处! 案例所属行业:轻工制造行业 项目实施时间:2015年 1.1 项目背景     奥瑞金包装股份有限公司是一家集金属制罐.金属印刷.底盖生产.易拉盖制造和新产品研发为一体的大型专业化金属包装企业.主要为客户提供各类食 品.饮料.罐头.调味品.啤酒.乳制品等产品的包装制品生产,同时可提供包括高科技包装设计.印刷.制造及全方位客户服务等一体的综合包装解决方案.     目前奥瑞金项目主要是针对新机房的

Linux运维之Web基础(HTTP基础)

本次博文的主题是web服务哈.web服务也是Internet上使用最多的服务,通常被称为WWW(World Wide Web,万维网)服务. [本次博文的主要内容] HTTP协议基础 HTTP的报文首部 HTTP的请求报文 HTTP的响应报文 常见的Web服务器和浏览器 一.HTTP协议基础: 1.HTTP是什么: HTTP:HyperText Transfer Protocol,超文本传送协议,定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器.

马哥2016全新Linux+Python高端运维班-Linux服务 DNS,httpd,加密通讯,vsftp,NFS,samba服务练习

本周作业内容: 1.详细描述一次加密通讯的过程,结合图示最佳. 一次加密通讯的过程: 首先Bob用单向加密的方法提取数据的特征码,用自己的私钥加密这段特征码,并附加到数据的后面. Bob用对称加密算法把数据及特征码整个进行加密. Bob用接收方的公钥加密对称密钥并附加到数据后面. Alice用私钥解密对称密钥. Alice用对称密钥解密出数据及加密的特征码. Alice用发送方的公钥解密特征码,并用相同的算法算出数据的特征码,比较两个特征码是否一致,若一致即可获得Bob的数据. 如图所示: 单向

利用tengine的nginx_upstream_check_module来检测后端服务状态

nginx_upstream_check_module 是专门提供负载均衡器内节点的健康检查的外部模块,由淘宝的姚伟斌大神开发,通过它可以用来检测后端 realserver 的健康状态.如果后端 realserver 不可用,则后面的请求就不会转发到该节点上,并持续检查几点的状态.在淘宝自己的 tengine 上是自带了该模块.项目地址:https://github.com/yaoweibin/nginx_upstream_check_module 参考文档:https://www.cnblog

linux高级运维之memcache服务

案例1:构建memcached服务 案例2:LNMP+memcached 案例3:PHP的本地Session信息 案例4:PHP实现session共享 memcache简介及理论基础: 关系型数据库:mysql mariadb RDBMS即关系数据库管理系统(Relational Database Management System) NoSQL,泛指非关系型的数据库 kv key=vaule数据库 redis mongdb 传统web架构的问题: 许多web应用都将数据保存到RDBMS中,应用