`

怎样使用Twitter来远程监控服务器的运行情况(转)

阅读更多

 

Download Source Code + Binary

 

This is a piece of code that I just developed out of fun, but it helped to resolve one of my recent problem.

I was running a batch job in one of the Unix server. It was already 10 p.m. I had not taken my dinner yet. The batch was going to take long time to finish, maybe 5 to 7 hours. I had to monitor it to make sure it is completed by tomorrow so that someone else could proceed with his work. Going back home and coming back was troublesome. I wished that I could monitor the job remotely, but the server is protected by firewall. The only port opened is port 80.

I was wondering if there is anything that I can do so that I can monitor the Unix server remotely, bypassing the firewall. Then I stumbled upon the idea – why not use Twitter to achieve it ??

I came out with the code to do that in roughly 1 hour. It may not be perfect, but at least it achieved what I wanted to do.

Using the program, I can monitor my server remotely. Below is a screenshot of the output using WinTwit

 

<!--adsense-->

By sending the command starting with “RUN@”, it will be executed by a Java process running on the server. The output will be sent back to Twitter and get refreshed at WinTwit.

To start with, you need to configure the proxy server, proxy port, and your Twitter settings in the properties file.

twitter.user.name=
twitter.user.password=

twitter.check.interval.seconds=5

http.proxyHost=
http.proxyPort=

TwitterPoller loads the properties from the configuration file, and starts TwitterExecutor, which is a Java TimerTask.

public static void main(String args[]) {
    try {
        Properties systemSettings = = System.getProperties();
        systemSettings.load(
        TwitterExecutor.class.getResourceAsStream(
        CONFIG_FILE));
        System.setProperties(systemSettings);
        long interval =
          Long.parseLong(System.getProperty(CHECK_INTERVAL));
        Timer timer = new Timer();
        timer.schedule(new TwitterExecutor(), 0, interval * 1000);
    } catch (IOException e) {
        System.err.println(e.getMessage());
        e.printStackTrace();
    }
}

In TwitterExecutor, I poll Twitter, run the command, and send back the results to Twitter.

Twitter twitter = new Twitter(userName, password);
Twitter.Status status = twitter.getStatus(userName);
if (status.getText().startsWith(EXEC_PATTERN)) {
    String cmds[] = status.getText().split(EXEC_PATTERN);
    String cmd = "";
    for (String str : cmds) {
        cmd += str;
    }
    System.out.println("Running command: " + cmd);
    ExecutorResult result = execute(cmd);
    System.out.println("Output: " + result.getOutput());
    System.out.println("Exit: " + result.getExitStatus());
    if (result.getOutput() != null) {
        String output = result.getOutput();
        if (output.length() > 130) {
            int count = output.length() % 130;
            for (int i = 0; i < count; i++) {
                int startIndex = i * 130;
                int endIndex = (i * 130) + 130;
                if (endIndex > output.length())
                   endIndex = output.length() - 1;
                String text =
                   output.substring(startIndex, endIndex);
                twitter.updateStatus(text);
            }
        } else {
            twitter.updateStatus(output);
        }
    }
} else {
    System.out.println("Not a command: " + status.getText());
}

<!--adsense-->

The Java program size is very small. It takes very little memory and has no other dependencies. All you need is JDK 1.5.

The jar file twittersh.jar and config.properties are all you need. To run it,

java -cp <path to config.properties folder>:<path>/twittersh.jar
           com.twt.twitter.TwitterPoller

Note:

  1. This code is developed in a short time frame, and may not be bug free.
  2. The program is actually a backdoor which violates company security policies. I would advise that you use it wisely.
  3. Last, do not abuse Twitter

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    系统监控开源软件

    - **简介**:rtop是一款用Go语言开发的远程服务器监控工具。 - **最新版本**:rtop,此版本发布于一年前。 - **功能**: - 远程服务器监控; - 系统资源监控; - 性能分析。 #### 网络监控框架PFQ - **简介**:...

    FixingTwitter twitter运维资料

    - **专业团队支持**(NTTA):提供全天候的远程技术支持,确保快速响应各种紧急情况。 - **不依赖云服务**:尽管尝试过云服务,但由于对原始处理能力和低延迟的要求较高,最终选择自建数据中心。 - **解决实际问题**...

    Monitoring Mesos, Docker, Containers with Zabbix

    Zabbix支持自动发现、远程监控以及复杂的触发器和通知机制等功能。由于其高度可定制性和灵活性,Zabbix被广泛应用于各种规模的企业环境中,包括那些采用复杂IT基础设施的企业。 #### 三、Mesos概述 Apache Mesos是...

    Java JavaEE开源应用服务器 wildfly新特性与未来规划 共30页.pdf

    Hibernate作为ORM(对象关系映射)工具,提高了数据库操作的效率,还包含了RPC(远程过程调用)机制,消息队列,持久化层,缓存服务,命名服务,容器管理,表示层,任务调度,系统监控,事务处理和安全性等核心功能...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Sleuth学习讲义大全.pdf

    Zipkin是一个由Twitter开发的开源项目,用于收集和分析服务监控数据。它提供了可视化的界面,让用户可以方便地查看和分析调用链路,找出系统中的性能瓶颈。在Spring Cloud Sleuth中,Zipkin作为默认的后台监控工具...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包7

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Java资源包01

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    LogView:基于Django开发的用于远程查看LINUX主机日志的管理系统

    LogView是一个基于Django框架开发的日志管理系统,主要用于远程查看Linux主机上的日志文件。这个系统结合了Python的强大力量、Django的高效Web开发能力以及MySQL的可靠数据库存储,为用户提供了方便的日志查看和管理...

Global site tag (gtag.js) - Google Analytics