亲测好评:国产开源APM运维监控

【关注公众号“SRE运维部落”,文章下回复可随时交流】

亲测好评:国产开源APM运维监控_第1张图片

 SkyWalking简介

上期给大家介绍到韩国开源版APM监控pinpoint,今天给大家介绍下国产开源版APM告警软件,也是一款社区非常活跃的Apache开源软件。

SkyWalking分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
SkyWalking 是观察性分析平台和应用性能管理系统。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案.

主要功能

  • 多种监控手段,语言探针和service mesh

  • 多语言自动探针,Java,.NET Core和Node.JS

  • 轻量高效,不需要大数据

  • 模块化,UI、存储、集群管理多种机制可选

  • 支持告警

  • 优秀的可视化方案

亲测好评:国产开源APM运维监控_第2张图片

部署安装

一. 常用安装方式
1.官网下载安装

http://skywalking.apache.org/downloads/
wget https://www.apache.org/dyn/closer.cgi/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gz
tar -xzf apache-skywalking-apm-6.4.0.tar.gz

解压包既可使用,包内分服务端和客户端
服务端使用:

# /apache-skywalking-apm-incubating/bin ./startup.sh

客户端使用:
默认情况下skywalking会加载/apache-skywalking-apm-incubating/agent/config/agent.config文件,也可以手动指定

jvm参数配置:

java -javaagent:/apache-skywalking-apm-incubating/agent/skywalking-agent.jar -Dskywalking.agent.service_name=trace-api -Dskywalking.collector.backend_service=localhost:11800 -jar xxxx.jar

二. 安装参考文档   

1.http://skywalking.apache.org/zh/
2.https://www.jianshu.com/p/8157866deb86

使用规范

一. 服务地址
    1. http://10.7.xxx.xx:8080/  无相关账号密码,后期可对应进行二次开发
二. 使用操作

    仪表板:

    可针对应用节点的服务,端点,实例进行细度监控图标展示

    可针对数据库数据源的相关sql以及iqps等常用参数进行监控展示

    拓扑图:

    各种图表应用实例全局展示,各种高大上

    链路追踪

    监控细度在接口级别

    告警:

    可进行服务,服务实例,端点级别的监控,支持webhook告警模式,邮件钉钉自由开发。

亲测好评:国产开源APM运维监控_第3张图片

相关注意事项

1.修改数据库连接数据源

sw初期为提高性能降低资源使用,采用hbase文件数据库,造成重启oap后,旧数据丢失。可根据需求自行修改使用mysql5.5+或es7.0.0-版本。

修改方式:修改/skywalking-service-6.4.0/config/application.yml文件和/skywalking-service-6.4.0/config/datasource-settings.properties

亲测好评:国产开源APM运维监控_第4张图片

2.无用接口请求过滤【最好用的特色功能】

无用接口值相关的存活检测端口,在链路追踪会影响使用体验,可在客户端中进行配置进行过滤

skywalking-agent/config/apm-trace-ignore-plugin.config

3.traceid添加

traceid加入项目日志可进行日志查询时链路追踪,方便定位故障。

对项目进行侵入添加:

4.pom添加


org.apache.skywalking
apm-toolkit-logback-1.x
{project.release.version}

5.logback-spring.xml配置




%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n



6.webhook消息通知配置

sw可进行告警消息通知发送,通过webhook的方式将消息推送邮箱,企业微信,钉钉,短信。(自行开发)

修改方式:/skywalking-service-6.4.0/config/alarm-settings.xml可以配置告警规则,告警规则支持自定义。

亲测好评:国产开源APM运维监控_第5张图片

告警配置由以下几部分组成:

  1. service_resp_time_rule:告警规则名称 ***_rule (规则名称可以自定义但是必须以’_rule’结尾

  2. indicator-name:指标数据名称:定义参见http://t.cn/EGhfbmd

  3. op: 操作符:> , < , = 【当然你可以自己扩展开发其他的操作符】

  4. threshold:目标值:指标数据的目标数据 如sample中的1000就是服务响应时间,配合上操作符就是大于1000ms的服务响应

  5. period: 告警检查周期:多久检查一次当前的指标数据是否符合告警规则

  6. counts: 达到告警阈值的次数

  7. silence-period:忽略相同告警信息的周期

  8. message:告警信息

  9. webhooks:服务告警通知服务地址

  10. 针对sw的webhook进行编写的钉钉推送脚本,测试可用,仅供参考,如有需要可关注公众号【SRE运维部落】,文章下留言即可。

# -*- coding:utf-8 -*-
#/usr/bin/python
#write by WJC
import socket 
import urllib 
import urllib2 
import requests
import json
import time
serverPort = 6690
bind_ip = "10.7.xxx.xx" 
url="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxx"
headers = {"Content-Type": "application/json","charset": "utf-8"}
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, serverPort))
server.listen(5)
print ('the server is ready to receive')
def get_headers(line_list):
headers = {}
for line in line_list:
new_line = line.decode('utf8')
index = new_line.find(':')
key = new_line[:index]
value = new_line[index+1:].strip()
headers[key] = value
return headers
while True:
client, addr = server.accept()
print ("Accepted connection from: %s:%d") % (addr[0], addr[1])
sentence = client.recv(1024000)
line_list = sentence.split(b'\r\n')
print(line_list)
if len(line_list[9]) > 0:
line_list_str = eval(line_list[9])
for i in range(len(line_list_str)):
if line_list_str[i]['scopeId'] == 3:
msg_type = "接口告警" 
ms = "响应时间在过去10分钟内超过1000毫秒,并两次触发告警"
elif line_list_str[i]['scopeId'] == 1:
msg_type = "应用服务告警" 
ms = "请求成功率在过去10分钟内低于80%,并两次触发告警"
elif line_list_str[i]['scopeId'] == 0:
msg_type = "instance告警" 
ms = "响应时间在过去10分钟内超过1000毫秒,并三次触发告警"
elif line_list_str[i]['scopeId'] == 2:
msg_type = "instance告警"
ms = "90%的服务请求响应时间在过去10分钟内超过1000毫秒,并三次触发告警"
else:
msg_type = "另类告警"
id = line_list_str[i]['id0']
msg_data = line_list_str[i]['alarmMessage']
if msg_data.find('server-A') == -1 and msg_data.find('instance-A'): #告警需要屏蔽的内容
date=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
msg = '''
告警时间:{date}
告警类型:{msg_type}
告警 ID:{id}
告警内容:{msg_data}.
告警内容详述:该应用{ms},请相关同事注意关注!!!'''.format(date=date,msg_type=msg_type,id=id,msg_data=msg_data,ms=ms)
print(msg_data)
print(msg)
data = {
"msgtype": "text",
"at": {
"atMobiles": [
# "15230505700",
# "18601324188"
], 
"isAtAll": False, 
},
"text": {
"content": msg
}
} 
print(data)
req=requests.post(url,data=json.dumps(data),headers=headers)
client.close()

APM钉钉告警二次开发pinpoint(附带源码)

去哪儿通过Jira实现OKR系统化管理

高效开发:IntelliJIDEA的这些Debug技巧你都知道吗

声援Pandownload的同时,一定要懂法!

syncd一款高效开源的代码部署工具

高效开发:IntelliJIDEA的这些Debug技巧你都知道吗

运维必备:goreplay流量复制工具

一款SQL高效审计工具|解放DBA双手

实用技能:git子模块功能

亲测好评:国产开源APM运维监控_第6张图片

你可能感兴趣的:(运维监控)