zabbix跨网使用钉钉报警
来源:互联网 发布:足浴软件 编辑:程序博客网 时间:2024/04/29 02:26
摘要:最近由于短信平台的原因,需要将zabbix的报警信息实时的发送到钉钉群里面,这就需要使用到钉钉自带的小机器人,需要在需要发送信息的群里面添加一个小机器人,具体添加方式可以看钉钉官方文档。总共有5组zabbix集群,需要将5组的报警信息发送到钉钉,并且这5组均不能连接互联网,故直接将信息发送到钉钉是不行的,需要一台连接互联网的集群,发送报警信息。
具体架构:
1.在zabbix server上配置成脚本报警,当触发报警的时候,获得动作设置的主题,并记录到一个文件中。
2.在zabbix server上安装logstash,并写配置文件
3.运行logstash,并将报警信息实时的写到redis内
./logstash -f zabbix_redis.conf
4.运行可能不成功,可能是jdk版本的问题,这个需要注意
5.安装redis,这个简单,直接下载源码,解压,make就行,然后启动redis,这时候可能存在的问题是无法远程连接到redis,这是logstash是写不进来的,需要修改redis的配置文件
注释掉:bind 127.0.0.1 ;将protected-mode 设置成no
6.启动redis和logstash这就可以将数据实时写到redis了
7.报警是需要实时的读redis的内容,并将内容发送到群,这里使用的是redis的list结果
代码如下:
(1)从redis内读取数据并进行报警
package com.cars.tools;import net.sf.json.JSONObject;import redis.clients.jedis.Jedis;public class ZabbixToDingDing { public static void main(String[] args) { Jedis jedis= new Jedis("127.0.0.1",6379); String httpOrgCreateTest = "https://oapi.dingtalk.com/robot/send?*******"; String params; while(true){ String str = jedis.rpop("logstash_redis_zabbix_16081"); if(str!=null){ JSONObject obj = JSONObject.fromObject(str); System.out.println(obj.get("message")); String message = (String) obj.get("message"); params = "{\"msgtype\":"+"\"text\""+",\"text\": { \"content\": \""+message+"\"}}"; HttpUtil.doPostSSL(httpOrgCreateTest,params); } } }}
(2)https连接工具类
package com.cars.tools;import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.conn.ssl.X509HostnameVerifier; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.security.GeneralSecurityException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class HttpUtil { private static PoolingHttpClientConnectionManager connMgr; private static RequestConfig requestConfig; private static final int MAX_TIMEOUT = 7000; static { // 设置连接池 connMgr = new PoolingHttpClientConnectionManager(); // 设置连接池大小 connMgr.setMaxTotal(100); connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal()); RequestConfig.Builder configBuilder = RequestConfig.custom(); // 设置连接超时 configBuilder.setConnectTimeout(MAX_TIMEOUT); // 设置读取超时 configBuilder.setSocketTimeout(MAX_TIMEOUT); // 设置从连接池获取连接实例的超时 configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT); // 在提交请求之前 测试连接是否可用 configBuilder.setStaleConnectionCheckEnabled(true); requestConfig = configBuilder.build(); } /** * 发送 GET 请求(HTTP),不带输入数据 * @param url * @return */ public static String doGet(String url) { return doGet(url, new HashMap<String, Object>()); } /** * 发送 GET 请求(HTTP),K-V形式 * @param url * @param params * @return */ public static String doGet(String url, Map<String, Object> params) { String apiUrl = url; StringBuffer param = new StringBuffer(); int i = 0; for (String key : params.keySet()) { if (i == 0) param.append("?"); else param.append("&"); param.append(key).append("=").append(params.get(key)); i++; } apiUrl += param; String result = null; HttpClient httpclient = new DefaultHttpClient(); try { HttpGet httpPost = new HttpGet(apiUrl); HttpResponse response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); System.out.println("执行状态码 : " + statusCode); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); // result = IOUtils.toString(instream, "UTF-8"); } } catch (IOException e) { e.printStackTrace(); } return result; } /** * 发送 POST 请求(HTTP),不带输入数据 * @param apiUrl * @return */ public static String doPost(String apiUrl) { return doPost(apiUrl, new HashMap<String, Object>()); } /** * 发送 POST 请求(HTTP),K-V形式 * @param apiUrl API接口URL * @param params 参数map * @return */ public static String doPost(String apiUrl, Map<String, Object> params) { CloseableHttpClient httpClient = HttpClients.createDefault(); String httpStr = null; HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; try { httpPost.setConfig(requestConfig); List<NameValuePair> pairList = new ArrayList<>(params.size()); for (Map.Entry<String, Object> entry : params.entrySet()) { NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry .getValue().toString()); pairList.add(pair); } httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8"))); response = httpClient.execute(httpPost); System.out.println(response.toString()); HttpEntity entity = response.getEntity(); httpStr = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { e.printStackTrace(); } } } return httpStr; } /** * 发送 POST 请求(HTTP),JSON形式 * @param apiUrl * @param json json对象 * @return */ public static String doPost(String apiUrl, Object json) { CloseableHttpClient httpClient = HttpClients.createDefault(); String httpStr = null; HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; try { httpPost.setConfig(requestConfig); StringEntity stringEntity = new StringEntity(json.toString(),"UTF-8");//解决中文乱码问题 stringEntity.setContentEncoding("UTF-8"); stringEntity.setContentType("application/json"); httpPost.setEntity(stringEntity); response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); System.out.println(response.getStatusLine().getStatusCode()); httpStr = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { e.printStackTrace(); } } } return httpStr; } /** * 发送 SSL POST 请求(HTTPS),K-V形式 * @param apiUrl API接口URL * @param params 参数map * @return */ public static String doPostSSL(String apiUrl, Map<String, Object> params) { CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; String httpStr = null; try { httpPost.setConfig(requestConfig); List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size()); for (Map.Entry<String, Object> entry : params.entrySet()) { NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry .getValue().toString()); pairList.add(pair); } httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("utf-8"))); response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { return null; } HttpEntity entity = response.getEntity(); if (entity == null) { return null; } httpStr = EntityUtils.toString(entity, "utf-8"); } catch (Exception e) { e.printStackTrace(); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { e.printStackTrace(); } } } return httpStr; } /** * 发送 SSL POST 请求(HTTPS),JSON形式 * @param apiUrl API接口URL * @param json JSON对象 * @return */ public static String doPostSSL(String apiUrl, Object json) { CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; String httpStr = null; try { httpPost.setConfig(requestConfig); StringEntity stringEntity = new StringEntity(json.toString(),"UTF-8");//解决中文乱码问题 stringEntity.setContentEncoding("UTF-8"); stringEntity.setContentType("application/json"); httpPost.setEntity(stringEntity); response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { return null; } HttpEntity entity = response.getEntity(); if (entity == null) { return null; } httpStr = EntityUtils.toString(entity, "utf-8"); } catch (Exception e) { e.printStackTrace(); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { e.printStackTrace(); } } } return httpStr; } /** * 创建SSL安全连接 * * @return */ private static SSLConnectionSocketFactory createSSLConnSocketFactory() { SSLConnectionSocketFactory sslsf = null; try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } @Override public void verify(String host, SSLSocket ssl) throws IOException { } @Override public void verify(String host, X509Certificate cert) throws SSLException { } @Override public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException { } }); } catch (GeneralSecurityException e) { e.printStackTrace(); } return sslsf; } }
0 0
- zabbix跨网使用钉钉报警
- ZABBIX 钉钉报警 插件(python)
- 钉钉报警
- zabbix企业微信号、钉钉报警脚本
- Python实现钉钉发送报警消息
- python psutil结合钉钉报警
- zabbix之告警杂谈(钉钉告警)
- 开发日志:准备开发ERP对接钉钉,对使用钉钉API简单可行性概述。
- 钉钉的API
- 钉钉打卡神器
- 钉钉机器人
- 钉钉自定义机器人
- 钉钉消息发送
- 钉钉定时打卡
- 钉钉子
- 钉钉的功能介绍
- 钉钉发送信息脚本
- 钉钉机器人自动提醒
- Nginx正则表达式
- 前端开源项目周报0228
- mq报2035错误
- 树莓派3 GPS 串口调试。公式调整
- C# WinForm程序退出的方法
- zabbix跨网使用钉钉报警
- 感觉无知而又可笑
- MongoDB window 的安装&部署&使用
- ios组件化设计-路由
- 原理分析之三:初始化(配置文件读取和解析)
- 虚函数实现原理
- find命令中参数perm的用法
- SVN(Cornerstone)-添加忽略文件
- Viewport_coding