SkyWalking--告警--使用/教程/示例
原文网址:SkyWalking--告警--使用/教程_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍SkyWalking的告警功能的用法。
SkyWalking支持WebHook、gRPC、微信、钉钉、飞书等通知方式。
官网
alarm:https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md
oal规则语法:https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/oal.md
范围和字段:https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/scope-definitions.md
事件:https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/event.md
配置示例
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.# Sample alarm rules.
rules:# Rule unique name, must be ended with `_rule`.service_resp_time_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 10count: 3silence-period: 5message: 服务:{name}\n 指标:响应时间\n 详情:至少3次超过1000毫秒(最近10分钟内)service_sla_rule:# Metrics value need to be long, double or intmetrics-name: service_slaop: "<"threshold: 8000# The length of time to evaluate the metricsperiod: 10# How many times after the metrics match the condition, will trigger alarmcount: 2# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.silence-period: 3message: 服务:{name}\n 指标:成功率\n 详情:至少2次低于80%(最近10分钟内)service_resp_time_percentile_rule:# Metrics value need to be long, double or intmetrics-name: service_percentileop: ">"threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5# 至少有一个条件达到:p50>1000、p75>1000、p90>1000、p95>1000、p99>1000message: 服务:{name}\n 指标:响应时间\n 详情:至少3次百分位超过1000ms(最近10分钟内)service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 5message: 实例:{name}\n 指标:响应时间\n 详情:至少2次超过1000毫秒(最近10分钟内)database_access_resp_time_rule:metrics-name: database_access_resp_timethreshold: 1000op: ">"period: 10count: 2message: 数据库访问:{name}\n 指标:响应时间\n 详情:至少2次超过1000毫秒(最近10分钟内)endpoint_relation_resp_time_rule:metrics-name: endpoint_relation_resp_timethreshold: 1000op: ">"period: 10count: 2message: 端点关系:{name}\n 指标:响应时间\n 详情:至少2次超过1000毫秒(最近10分钟内)instance_jvm_old_gc_count_rule:metrics-name: instance_jvm_old_gc_countthreshold: 1op: ">"period: 1440count: 1message: 实例:{name}\n 指标:OldGC次数\n 详情:最近1天内大于1次instance_jvm_young_gc_count_rule:metrics-name: instance_jvm_young_gc_countthreshold: 1op: ">"period: 5count: 100message: 实例:{name}\n 指标:YoungGC次数\n 详情:最近5分钟内大于100次# 需要在config/oal/core.oal添加一行:endpoint_abnormal = from(Endpoint.*).filter(responseCode in [404, 500, 503]).count();endpoint_abnormal_rule:metrics-name: endpoint_abnormalthreshold: 1op: ">="period: 2count: 1message: 接口:{name}\n 指标:接口异常\n 详情:最近2分钟内至少1次\n
# Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.
# Because the number of endpoint is much more than service and instance.
#
# endpoint_avg_rule:
# metrics-name: endpoint_avg
# op: ">"
# threshold: 1000
# period: 10
# count: 2
# silence-period: 5
# message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minuteswebhooks:
# - http://127.0.0.1/notify/
# - http://127.0.0.1/go-wechat/dingtalkHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking 告警: \n %s"}}webhooks:- url: https://oapi.dingtalk.com/robot/send?access_token=<钉钉机器人的access_token>secret: <钉钉机器人的secret>
告警简介
说明
Apache SkyWalking告警是由一组规则驱动。
告警规则的配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml。
alarm-settings.yml中的rules.xxx_rule.metrics-name对应的是config/oal路径下的配置文件中的详细规则:core.oal、event.oal,java-agent.oal, browser.oal。
告警规则的组成部分
告警规则的定义分为三部分:
- 告警规则:定义了触发告警所考虑的条件。
- WebHooks:当告警触发时,被调用的服务端点列表。
- gRPCHook:当告警触发时,被调用的远程gRPC方法的主机和端口。
名词含义
Defines the relation between scope and entity name.
- Service: Service name
- Instance: {Instance name} of {Service name}
- Endpoint: {Endpoint name} in {Service name}
- 端点。即:接口(也就是url)
- endpoint 规则相比 service、instance 规则耗费更多内存及资源
- Database: Database service name
- Service Relation: {Source service name} to {Dest service name}
- Instance Relation: {Source instance name} of {Source service name} to {Dest instance name} of {Dest service name}
- Endpoint Relation: {Source endpoint name} in {Source Service name} to {Dest endpoint name} in {Dest service name}
规则
告警规则有两种类型,单独规则(Individual Rules)和复合规则(Composite Rules),复合规则是单独规则的组合。
单独规则
单独规则主要有以下几点:
- Rule Name
- 规则名称,在告警信息中显示的唯一名称,必须以_rule结尾。
- metrics-name
- 度量名称。对应的规则在:config/oal/core.oal。
- 默认配置中可以用于告警的度量有:服务,实例,端点,服务关系,实例关系,端点关系。
- 只支持long,double和int类型。
- Include-names
- 包含在此规则之内的实体名称列表。
- Exclude-names
- 排除在此规则以外的实体名称列表。
- Include-names-regex
- 提供一个正则表达式来包含实体名称。如果同时设置包含名称列表和包含名称的正则表达式,则两个规则都将生效。
- Exclude-names-regex
- 提供一个正则表达式来排除实体名称。如果同时设置排除名称列表和排除名称的正则表达式,则两个规则都将生效。
- Include-labels
- 包含在此规则之内的标签。
- Exclude-labels
- 排除在此规则以外的标签。
- Include-labels-regex
- 提供一个正则表达式来包含标签。如果同时设置包含标签列表和包含标签的正则表达式,则两个规则都将生效。
- Exclude-labels-regex
- 提供一个正则表达式来排除标签。如果同时设置排除标签列表和排除标签的正则表达式,则两个规则都将生效。
- 标签的设置必须把数据存储在meter-system中,例如:Prometheus, Micrometer。以上四个标签设置必须实现LabeledValueHolder接口。
- Threshold
- 阈值。
- 对于多个值指标,例如percentile,阈值是一个数组。像value1 value2 value3 value4 value5这样描述。
- 每个值可以作为度量中每个值的阈值。如果不想通过此值或某些值触发警报,则将值设置为 -。例如在percentile中,value1是P50的阈值,value2是P75的阈值,那么-,-,value3, value4, value5的意思是,没有阈值的P50和P75的percentile告警规则。
- Op
- 操作符,支持>, >=, <, <=, =。
- Period
- 多久告警规则需要被检查一下。这是一个时间窗口,与后端部署环境时间相匹配。
- Count
- 在一个周期窗口中,如果按Op计算超过阈值的次数达到Count,则发送告警。
- Only-as-condition
- true或者false,指定规则是否可以发送告警,或者仅作为复合规则的条件。
- Silence-period
- 在时间N中触发报警后,在N -> N + silence-period这段时间内不告警。 默认情况下,它和period一样,这意味着相同的告警(同一个度量名称拥有相同的Id)在同一个周期内只会触发一次。
- Message
- 该规则触发时,发送的通知消息。
- 里边可以使用变量。{name} 会解析成规则名称。
示例
rules:service_resp_time_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 10message: 服务【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 5count: 2silence-period: 10message: 实例【{name}】的平均响应时间在最近5分钟内有2分钟超过1秒endpoint_resp_time_rule:metrics-name: endpoint_avgthreshold: 1000op: ">"period: 10count: 2message: 端点【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒
复合规则
复合规则仅适用于针对相同实体级别的告警规则,例如都是服务级别的告警规则:service_percent_rule && service_resp_time_percentile_rule。
不可以编写不同实体级别的告警规则,例如服务级别的一个告警规则和端点级别的一个规则:service_percent_rule && endpoint_percent_rule。
复合规则主要有以下几点:
- Rule name
- 规则名称,在告警信息中显示的唯一名称,必须以_rule结尾。
- Expression
- 指定如何组成规则,支持&&, ||, ()操作符。
- Message
- 该规则触发时,发送的通知消息。
- 里边可以使用变量。{name} 会解析成规则名称。
- Tags
- Tags是与报警关联的键值对,被用来指定对用户来说很重要的属性。
示例
rules:# Rule unique name, must be ended with `_rule`.endpoint_percent_rule:# Metrics value need to be long, double or intmetrics-name: endpoint_percentthreshold: 75op: <# The length of time to evaluate the metricsperiod: 10# How many times after the metrics match the condition, will trigger alarmcount: 3# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.silence-period: 10# Specify if the rule can send notification or just as an condition of composite ruleonly-as-condition: falsetags:level: WARNINGservice_percent_rule:metrics-name: service_percent# [Optional] Default, match all services in this metricsinclude-names:- service_a- service_bexclude-names:- service_c# Single value metrics threshold.threshold: 85op: <period: 10count: 4only-as-condition: falseservice_resp_time_percentile_rule:# Metrics value need to be long, double or intmetrics-name: service_percentileop: ">"# Multiple value metrics threshold. Thresholds for P50, P75, P90, P95, P99.threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000only-as-condition: falsemeter_service_status_code_rule:metrics-name: meter_status_codeexclude-labels:- "200"op: ">"threshold: 10period: 10count: 3silence-period: 5message: The request number of entity {name} non-200 status is more than expected.only-as-condition: false
composite-rules:comp_rule:# Must satisfied percent rule and resp time rule expression: service_percent_rule && service_resp_time_percentile_rulemessage: Service {name} successful rate is less than 80% and P50 of response time is over 1000mstags:level: CRITICAL
默认的规则
- 最近3分钟内服务平均响应时间超过1秒
- 最近2分钟内服务成功率低于80%
- 最近3分钟内服务响应时间超过1秒的百分比
- 最近2分钟内服务的实例的平均响应时间超过1秒,且服务名字与正则表达式匹配
- 最近2分钟内端点平均响应时间超过1秒
- 最近2分钟内数据库平均响应时间超过1秒
- 最近2分钟内端点关联平均响应时间超过1秒
配置文件为:config/alarm-settings.yml:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.# Sample alarm rules.
rules:# Rule unique name, must be ended with `_rule`.service_resp_time_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 10count: 3silence-period: 5message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.service_sla_rule:# Metrics value need to be long, double or intmetrics-name: service_slaop: "<"threshold: 8000# The length of time to evaluate the metricsperiod: 10# How many times after the metrics match the condition, will trigger alarmcount: 2# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.silence-period: 3message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutesservice_resp_time_percentile_rule:# Metrics value need to be long, double or intmetrics-name: service_percentileop: ">"threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 5message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutesdatabase_access_resp_time_rule:metrics-name: database_access_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutesendpoint_relation_resp_time_rule:metrics-name: endpoint_relation_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
# Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.
# Because the number of endpoint is much more than service and instance.
#
# endpoint_avg_rule:
# metrics-name: endpoint_avg
# op: ">"
# threshold: 1000
# period: 10
# count: 2
# silence-period: 5
# message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minuteswebhooks:
# - http://127.0.0.1/notify/
# - http://127.0.0.1/go-wechat/
告警通知
SkyWalking支持多种通知方式:Webhook,gRPCHook,Slack Chat Hook,微信,钉钉,飞书,WeLink。
Webhook
Webhook 要求一个点对点的 Web 容器。告警的消息会通过 HTTP 请求进行发送,请求方法为 POST,Content-Type 为 application/json,JSON 格式包含以下信息:
- scopeId:目标 Scope 的 ID。
- name:目标 Scope 的实体名称。
- id0:Scope 实体的 ID。
- id1:未使用。
- ruleName:您在 alarm-settings.yml 中配置的规则名。
- alarmMessage. 告警消息内容。
- startTime. 告警时间戳,当前时间与 UTC 1970/1/1 相差的毫秒数。
示例:
[{"scopeId": 1, "scope": "SERVICE","name": "one-more-service", "id0": "b3JkZXItY2VudGVyLXNlYXJjaC1hcGk=.1", "id1": "", "ruleName": "service_resp_time_rule","alarmMessage": "服务【one-more-service】的平均响应时间在最近10分钟内有2分钟超过1秒","startTime": 1617670815000
}, {"scopeId": 2,"scope": "SERVICE_INSTANCE","name": "e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11 of one-more-service","id0": "dWF0LWxib2Mtc2VydmljZQ==.1_ZTRiMzEyNjJhY2FhNDdlZjkyYTIyYjZhMmI4YTdjYjFAMTcyLjI0LjMwLjEzOA==","id1": "","ruleName": "instance_jvm_young_gc_count_rule","alarmMessage": "实例【e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11 of one-more-service】的YoungGC次数在最近10分钟内有2分钟超过10次","startTime": 1617670815000
}, {"scopeId": 3,"scope": "ENDPOINT","name": "/one/more/endpoint in one-more-service","id0": "b25lcGllY2UtYXBp.1_L3RlYWNoZXIvc3R1ZGVudC92aXBsZXNzb25z","id1": "","ruleName": "endpoint_resp_time_rule","alarmMessage": "端点【/one/more/endpoint in one-more-service】的平均响应时间在最近10分钟内有2分钟超过1秒","startTime": 1617670815000
}]
gRPCHook
告警消息将使用 Protobuf 类型通过gRPC远程方法发送。消息所包含的键的信息在oap-server/server-alarm-plugin/src/main/proto/alarm-hook.proto
部分协议:
message AlarmMessage {int64 scopeId = 1;string scope = 2;string name = 3;string id0 = 4;string id1 = 5;string ruleName = 6;string alarmMessage = 7;int64 startTime = 8;AlarmTags tags = 9;
}message AlarmTags {// String key, String value pair.repeated KeyStringValuePair data = 1;
}message KeyStringValuePair {string key = 1;string value = 2;
}
Slack Chat Hook
可参考Webhooks入门指南并创建新的Webhooks。
如果您按以下方式配置了Slack Incoming Webhooks,则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
示例:(写到配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml)
slackHooks:textTemplate: |-{"type": "section","text": {"type": "mrkdwn","text": ":alarm_clock: *Apache Skywalking Alarm* \n **%s**."}}webhooks:- https://hooks.slack.com/services/x/y/z
微信
只有微信的企业版才支持 Webhooks ,如何使用微信的 Webhooks 可参见:帮助中心-企业微信。
如果您按以下方式配置了微信的 Webhooks ,则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
示例:(写到配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml)
wechatHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking 告警: \n %s."}}webhooks:- https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=dummy_key
钉钉
可以参考文档 - 钉钉开放平台创建新的Webhooks。为了安全起见,您可以为Webhook网址配置可选的密钥。
如果您按以下方式配置了钉钉的 Webhooks ,则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
示例:(写到配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml)
dingtalkHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking 告警: \n %s."}}webhooks:- url: https://oapi.dingtalk.com/robot/send?access_token=dummy_tokensecret: dummysecret
注意:如果钉钉收到的通知里中文乱码,检查 alarm-settings.yml 的编码,将其改为utf8即可。
飞书
可参考如何在群组中使用机器人?来创建Webhooks。安全起见,可以为一个单独的wenhook url配置一个secret。
如果想发送文本给用户,可以配置ats(飞书的user_id)并用“,”分开。报警信息将会使用application/json 格式以HTTP POST的方式发送。
示例:(写到配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml)
feishuHooks:textTemplate: |-{"msg_type": "text","content": {"text": "Apache SkyWalking Alarm: \n %s."},"ats":"feishu_user_id_1,feishu_user_id_2"}webhooks:- url: https://open.feishu.cn/open-apis/bot/v2/hook/dummy_tokensecret: dummysecret
WeLink
可参考API Explorer来创建Webhooks。
报警信息将会使用application/json 格式以HTTP POST的方式发送。
示例:(写到配置文件:SkyWalking服务端安装路径/config/alarm-settings.yml)
welinkHooks:textTemplate: "Apache SkyWalking Alarm: \n %s."webhooks:# you may find your own client_id and client_secret in your app, below are dummy, need to change.- client_id: "dummy_client_id"client_secret: dummy_secret_keyaccess_token_url: https://open.welink.huaweicloud.com/api/auth/v2/ticketsmessage_url: https://open.welink.huaweicloud.com/api/welinkim/v1/im-service/chat/group-chat# if you send to multi group at a time, separate group_ids with commas, e.g. "123xx","456xx"group_ids: "dummy_group_id"# make a name you like for the robot, it will display in grouprobot_name: robot
配置语法
见:SkyWalking--OAL--使用/教程/示例_IT利刃出鞘的博客-CSDN博客
其他网址
生产稳定:基于docker 搭建skywalking8.6.0-es7 链路追踪和JVM监控平台,钉钉告警_-CSDN博客
快速学习-Skywalking告警功能_逍遥云恋-CSDN博客
SkyWalking - 实现微服务监控告警_端碗吹水的技术博客_51CTO博客
Skywalking:接入告警_简单随风的博客-CSDN博客_skywalking 告警
Skywalking-告警功能实践_z69183787的专栏-CSDN博客
SkyWalking--告警--使用/教程/示例相关推荐
- SkyWalking--OAL--使用/教程/示例
原文网址:SkyWalking--OAL--使用/教程/示例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SkyWalking的OAL语法的用法. 官网 OAL介绍 http ...
- 乐鑫代理启明云端分享:用ESP32单片机控制LED教程示例
提示:准备好开发板和LED灯 1.可以选择启明云端推出的ESP32开发板,上手简单 原因: 启明云端WT-ESP32-DevKitC V4开发板,这是一款基于ESP32的小型开发板,集WIFI+蓝牙方 ...
- java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等
java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...
- Java泛型教程–示例类,接口,方法,通配符等
泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 在集合类中使用泛型非常容易,但是它提供了比仅创 ...
- SkyWalking告警
前言 又是一个意味深长的夜晚,本来今天晚上的规划是把SkyWalking的性能剖析搞一下的,然后弄一下公司的项目,没想到弄SkyWalking性能剖析还挺顺利的,把核心问题找到了,然后搞得太投入了,就 ...
- maven--profile--使用/教程/示例
原文网址:maven--profile--使用/教程/示例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例说明maven的profile的使用. mavan的profile作 ...
- 美女同事的烦恼:如何配置 Apache SkyWalking 告警?
小婉 技术部基本上是一个和尚庙,女生非常少,即使有女生也略微有点抽象,小婉就不一样,她气质绝佳. 上午,同事小婉刚才从老板办公室里出来,看上去一脸不悦的样子.为了表示对同事的关(ba)心(gua),我 ...
- SkyWalking告警通知
一.SkyWalking告警 警报机制根据来自不同层的服务/实例/端点的度量来衡量系统性能.警报内核是一个内存中的.基于时间窗口的队列. 告警规则的定义分为三部分: 告警规则:它们定义了应该如何触发度 ...
- Jackson--使用/教程/示例
原文网址:Jackson--使用/教程/示例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用实例介绍Jackson的使用. 项目中我们经常会用到JSON,比如:将JSON字符串反 ...
最新文章
- Spring XML中如何使用 符号,比如数据库MySQL连接
- iOS13 一次Crash定位 - 被释放的NSURL.host
- centos8 安装docker_利用Jenkins和Docker实现小公司的自动部署
- Java 内置的数据类型
- 西北农林科技大学计算机组成原理脱机实验,西北农林科技大学_计算机组成原理XP实验系统要素.ppt...
- oraclemt 无法启动服务_调整MT后台 解决站点压力问题
- 知乎热问:一个程序员的水平能差到什么程度?
- 消息中间件的使用场景
- 2020-10-18
- ApacheCN 翻译活动进度公告 2019.6.15
- 三天搭建内容推荐系统——标签挖掘、画像搭建、算法推荐
- python3实现网络爬虫(4)--BeautifulSoup使用(3)
- html5 canvas消除锯齿,HTML5 Canvas 如何取消反锯齿绘图
- SQL实战(9)--从titles表获取按照title进行分组
- 100ms的延迟让亚马逊损失1%销量,如何快速降低网站延迟?
- YOLOv3 车辆,行人,自行车检测
- 分享5个插件,助你在Python的道路越战越勇
- android获取屏幕尺寸,像素
- 启明星辰 天清汉马USG防火墙(后台弱口令/任意用户权限)
- r7 270 linux,装个puppy linux 低配机器也能流畅运行
热门文章
- python 登陆网站图片验证,用python登录带弱图片验证码的网站
- 中轴型SpA的两种诊断分支具有可比性
- C++面向对象学习之路(一)类与对象
- 电力设备事故演练仿真培训_电力事故VR培训_广州华锐互动
- 虚幻4地形怎么增加层_怎么快速实现住房自由?学学这位95后小哥哥,花70万自建4层别墅...
- 什么是生产管理?制造企业想要做好生产管理应该怎么做?
- Android Qcom USB Driver学习(八)
- 服务器系统开机提示0xc000007b,重装系统出现0xc000007b无法正常启动怎么解决
- Android源码文件夹结构
- STM32 CAN通信的学习笔记总结(从小白开始)