陋室铭


  • 首页

  • 分类

  • 归档

  • 标签
陋室铭

Java性能监控和统计工具——MyPerf4J

发表于 2019-02-13 | 阅读次数

简介

MyPerf4J,一个针对高并发、低延迟应用设计的简单、快速且无侵入的Java方法性能监控和统计工具。

具有以下特性

  • 无侵入: 采用JavaAgent方式,对应用程序完全无侵入,无需修改应用代码
  • 高性能: 性能消耗非常小,每次记录只花费73ns,可以在生产环境长期使用
  • 低内存: 采用内存复用的方式,整个生命周期只产生极少的临时对象,不影响应用程序的GC
  • 高精度: 采用纳秒来计算响应时间
  • 高实时: 支持秒级监控,最低1s!

架构

MyPerf4J的整体架构图如下所示:
图1

各组件:

  • Java Application: MyPerf4J 的运行容器
  • MyPerf4J: Metrics 收集和统计
  • Collector: 日志收集器(可以是Telegraf或者是filebeat)
  • Storage: 存储平台(可以是InfluxDB也可以是Elasticsearch)
  • Dashboard: 可视化平台(可以是Grafana也可以是Chronograf)

关系:

  • MyPerf4J 定时把指定时间片内的统计数据写入日志文件
  • Collector 从日志文件中读取统计数据,并写入 Storage
  • Dashboard 从 Storage 中读取数据并展示

监控指标

Method Metrics

  • RPS: 每秒请求数
  • Count: 总请求数
  • RT: 方法响应时间
  • Avg: 方法平均响应时间
  • Min: 方法最小响应时间
  • Max: 方法最大响应时间
  • StdDev: 方法响应时间的标准差
  • TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100
  • TP: Top 百分数(Top Percentile)
  • TP90: 在一个时间段内(如1分钟),统计该方法每次调用所消耗的时间,并将这些时间按从小到大的顺序进行排序,取第 90% 的那个值作为 TP90 值

JVM Thread Metrics

  • TotalStarted: 自 JVM 启动以来启动过的线程数
  • Active: 当前存活的线程数,包括守护线程和非守护线程
  • Daemon: 当前存活的守护线程数
  • Runnable: 正在 JVM 中执行的线程
  • Blocked: 受阻塞并等待某个监视器锁的线程数
  • Waiting: 无限期地等待另一个线程来执行某一特定操作的线程数
  • TimedWaiting: 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态数
  • Terminated: 已退出的线程数
  • Peak: 自 JVM 启动或峰值重置以来峰值活动线程计数
  • New: 至今尚未启动的线程数

JVM Memory Metrics

  • HeapInit: JVM 在启动期间从操作系统请求的用于内存管理的初始堆内内存容量(以字节为单位)
  • HeapUsed: JVM 当前已经使用的堆内内存量(以字节为单位)
  • HeapCommitted: 已提交的堆内内存量,保证可以由 JVM 使用的堆内内存量(以字节为单位)
  • HeapMax: 可以用于内存管理的最大堆内内存量(以字节为单位)
  • NonHeapInit: JVM 在启动期间从操作系统请求的用于内存管理的初始非堆内内存容量(以字节为单位)
  • NonHeapUsed: JVM 当前已经使用的非堆内内存量(以字节为单位)
  • NonHeapCommitted: 已提交的堆内内存量,保证可以由 JVM 使用的非堆内内存量(以字节为单位)
  • NonHeapMax: 可以用于内存管理的最大非堆内内存量(以字节为单位)

JVM ByteBuff Metrics

  • Name: 缓存池名称
  • Count: 缓存池中 buffer 的数量
  • MemoryUsed: JVM 用于此缓冲池的内存估计值
  • MemoryCapacity: 缓存池中所有 buffer 的总容量估计值

JVM GC Metrics

  • CollectCount: 累计 GC 次数
  • CollectTime: 累计 GC 时间

JVM Class Metrics

  • Total: 自 JVM 开始执行到目前已经加载的类的总数
  • Loaded: 当前加载到 JVM 中的类的数量
  • Unloaded: 自 JVM 开始执行到目前已经卸载的类的总数

使用方式:

1
java  -javaagent:/Users/yangchj/soft/java/MyPerf4J-2.4.0/MyPerf4J-ASM-2.4.0.jar -DMyPerf4JPropFile=/Users/yangchj/soft/java/MyPerf4J-2.4.0/conf/myPerf4j.properties -jar myperfdemo-0.0.1-SNAPSHOT.jar

陋室铭

Android常见字符串转义符

发表于 2019-01-07 | 阅读次数

android中XML标志符的数字和字符串转义符

1
2
3
4
5
6
7
8
9
10
"   双引号  " 或 "
‘ 单引号 ' 或 '
& and符号 & 或 &
< 小于号 &#60; 或 &lt;
> 大于号 &#62; 或 &gt;
@ at符号 &#64;
© 版权 &#169;或 &copy;
® 注册商标 &#174;或 &reg;
™ 商标 &#8482;
¥ 人民币 &#165;或 &yen;

下面字符被定义为空白字符

1
2
3
4
空格 &#x0020;
Tab &#x0009;
回车 &#x000D;
换行 &#x000A;
陋室铭

Android颜色透明度

发表于 2018-12-29 | 阅读次数
透明度 16进制表
100% 00
99% 03
98% 05
97% 07
96% 0A
95% 0D
94% 0F
93% 12
92% 14
91% 17
90% 1A
89% 1C
88% 1E
87% 21
86% 24
85% 26
84% 29
83% 2B
82% 2E
81% 30
80% 33
79% 36
78% 38
77% 3B
76% 3D
75% 40
74% 42
73% 45
72% 47
71% 4A
70% 4D
69% 4F
68% 52
67% 54
66% 57
65% 59
64% 5C
63% 5E
62% 61
61% 63
60% 66
59% 69
58% 6B
57% 6E
56% 70
55% 73
54% 75
53% 78
52% 7A
51% 7D
50% 80
49% 82
48% 85
47% 87
46% 8A
45% 8C
44% 8F
43% 91
42% 94
41% 96
40% 99
39% 9C
38% 9E
37% A1
36% A3
35% A6
34% A8
33% AB
32% AD
31% B0
30% B3
29% B5
28% B8
27% BA
26% BD
25% BF
24% C2
23% C4
22% C7
21% C9
20% CC
19% CF
18% D1
17% D4
16% D6
15% D9
14% DB
13% DE
12% E0
11% E3
10% E6
9% E8
8% EB
7% ED
6% F0
5% F2
4% F5
3% F7
2% FA
1% FC
0% FF
陋室铭

VSCode更新失败

发表于 2018-12-29 | 阅读次数

Mac vscode 更新失败:Permission denied解决办法

  1. 先把vscode完全关闭
    1
    2
    3
    4

    sudo chown $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt/
    sudo chown $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt/*
    xattr -dr com.apple.quarantine /Applications/Visual\ Studio\ Code.app
陋室铭

sonarqube7.3安装及使用

发表于 2018-10-23 | 阅读次数

下载sonarqube7.3

下载sonar

安装配置

解压下载sonarqube-7.3.zip

  • bin 用来启动 SonarQube 服务,这里已经提供好了不同系统启动 | 停止脚本了,目前提供了 linux-x86-32、linux-x86-64、macosx-universal-64、windows-x86-32、windows-x86-64

  • conf 用来存放配置文件,若需要修改配置,修改 sonar.properties 文件即可

  • 用来存放数据,SonarQube默认使用 h2 数据库存储,同时支持其他如Mysql、Orace、Mssql、Postgresql数据库存储

  • extensions 用来存放插件 jar 包,以后我们需要安装插件就放在这里

  • lib 用来存放各种所依赖的 jar 包,包括上边各数据库驱动包 (默认已提供一个版本,如果版本不匹配,则在这里手动更新下

  • logs 用来存放各日志信息

  • web 用来提供 SonarQube web 网页服务

配置mysql数据库

1
2
3
4
5
# 修改sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName:com.mysql.jdbc.Driver
1
2
#创建本地 Mysql 创建数据库
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
1
2
3
4
5
// 本地 Mysql 创建用户并分配权限
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
FLUSH PRIVILEGES;

使用

本人使用的是Mac环境,通过执行/bin/macosx-universal-64/sonar.sh start | stop | restart | status

本地访问http://localhost:9000,初始管理员admin/admin

插件安装

配置->系统->更新中心
安装所需的插件

  • Chinese Pack 汉化

使用SonarQube 分析Maven项目

在Maven的setting.xml文件中增加 sonarQube 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
<sonar.host.url>
http://localhost:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>

在maven工程目录中执行

1
2
3
mvn clean verify sonar:sonar  #或

mvn clean install sonar:sonar

指定使用某个版本的sonar-maven-plugin插件

  1. pom文件中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <build>
    <plugins>
    <plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.3.0.603</version>
    </plugin>
    </plugins>
    </build>
  2. 使用mvn命令指定

    1
    mvn clean install org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar

下载SonarQube Scanner

下载SonarQube+Scanner

Jekins配置

jenkins启动

1
nohup java -jar jenkins.war --httpPort=8098 &

安装插件sonar 插件
jenkins上安装sonarqube plugin ,如果没有就安装sonarqube scanner for jenkins这个插件

关联sonar插件

  1. 系统设置
    系统管理->系统设置-> Add SonarQube ->sonarqube servers 修改

    1
    server Url 指定sonar的地址
  2. 全局设置
    设置sonar扫描器位置
    系统管理->Global Tool Configuration ->SonarQube Scanner -> 新增SonarQube Scanner

    1
    2
    Name: sonar
    去掉自动安装,配置source_runner_home:指定自己的sonar扫描器的安装目录

关联项目

选择一个项目,配置>构建>执行Exceute SonarQube Scanner > Analysis properties填写相关参数

1
2
3
4
5
6
sonar.projectKey=demo
sonar.projectName=demo
sonar.projectVersion=1.0
sonar.sources=/xxx/src
sonar.language=java
sonar.sourceEncoding=UTF-8

保存配置

新建一个Jenkins项目或者选择一个已有的Jenkins项目

https://www.ibm.com/developerworks/cn/devops/1612_qusm_jenkins/index.html

使用 SonarQube Scanner 进行代码分析有两种方法:

  1. 使用构建后步骤
  2. 在构建的过程中增加SonarQube Scanner的步骤
陋室铭

ScrollView嵌套RecycleView导致滑动卡顿问题解决方案

发表于 2018-10-19 | 阅读次数

问题

ScrollView中嵌套RecycleView,由于ScollView和RecycleView都是滑动控件,会有滑动上的冲突,导致滑动起来有些卡顿

解决方案

重写LayoutManager,禁止纵向滑动,这样RecycleView就一如既往的流畅了

1
2
3
4
5
6
7
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false){
@Override
public boolean canScrollVertically() {
return false;
}

};

陋室铭

Genymotion模拟器安装配置ARM支持

发表于 2018-09-21 | 阅读次数

针对5.0以上模拟器的解决方法:

  1. 下载Genymotion-ARM-Translation.zip

  2. 把下载的文件push到手机中

    1
    adb push Genymotion-ARM-Translation.zip /sdcard/Download
  3. 然后adb shell flash-archive.sh 该zip包 即可

    1
    adb shell flash-archive.sh /sdcard/Download/Genymotion-ARM-Translation.zip
陋室铭

加固后的apk反编译方法之Frida

发表于 2018-07-27 | 阅读次数

简介

Fria是一款基于Python + JavaScript 的Hook与调试框架,在Android\Linux\Windows等平台均能使用。以Mac平台为例,来对
android应用程序进行hook.Frida官网

安装Frida

  1. 通过pip安装

    1
    pip install frida
  2. 去下载对应平台的egg安装包进行安装
    下载地址
    当前版本12.0.7。下载对应平台和python版本的安装包,如Mac python3.6对应frida-12.0.7-py3.6-macosx-10.6-intel.egg

注:由于网络原因,方法1安装时间太久,这里推荐第二种方法。

安装完成后在命令窗口执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
frida-ps

PID Name
----- --------------------------------------------
564 AirPlayUIAgent
17427 Android Studio
909 App
1516 Code
67732 CoreServicesUIAgent
602 Dr. Cleaner
60553 Firefox
61307 FirefoxCP Web Content
60566 FirefoxCP Web Content
68927 Google Chrome
62086 Keychain Circle Notification
712 LaterAgent
581 QQMacMgrMonitor
618 Shadowsocks
69241 Siri
69270 SiriNCService
1879 Sublime Text
346 SystemUIServer
577 TISwitcher
501 Wi-Fi
451 com.apple.PressAndHold
393 com.apple.dock.extra
385 iTunes Helper
409 imklaunchagent
117 loginwindow
568 nbagent

Android下Frida环境的搭建

真机:小米3- 已获取root 权限
genomotion模拟器7.1版本

  1. 下载frida-server
    找到对应平台对应版本的包下载,如frida-server-12.0.7-android-arm64.xz frida-server-12.0.7-android-arm.xz frida-server-12.0.7-android-x86_64.xz

小米3,选择frida-server-12.0.7-android-arm64.xz

  1. 解压包

    1
    xz -d frida-server-12.0.7-android-arm64.xz
  2. 文件上传到手机中,并赋予执行权限

    1
    2
    3
    4
    5
    6
    adb push frida-server-12.0.7-android-arm64 /data/local/tmp/frida-server

    adb shell
    cd /data/local/tmp
    chmod 755 frida-server
    ./frida-server
  3. 查看frida-server是否启动成功

    1
    frida-ps -U #-U表示USB,允许Frida检查USB设备

下载基于Frida的脱壳工具

frida-unpack

脚本使用方法:

  • 在手机上启动Frida server端
  • 执行脱壳脚本

    1
    ./inject.sh 脱壳的应用包名 OpenMemory.js
  • 脱壳后的dex保存在/data/data/应用包名/目录下

另,python脚本支持

1
python3 frida_unpack.py 应用包名

  • 查看/data/data/应用包名/目录下的dex文件
1
2
3
使用dex-tools

sh d2j-jar2dex.sh xxx.dex
陋室铭

Docker容器技术

发表于 2018-07-11 | 分类于 Docker | 阅读次数

简介

DOCKER是一个基于LXC技术之上构建的container容器引擎,通过内核虚拟化技术(namespace及cgroups)来提供容器的资源隔离与安全保障,KVM是通过硬件实现的虚拟化技术,它是通过系统来实现资源隔离与安全保障,占用系统资源比较小。

Docker组成

客户端和服务端

Docker组件

  • 镜像
  • 容器
  • 仓库

Docker与Openstack对比

类别 Docker OpenStack
部署难度 非常简单 组件多,部署复杂
启动速度 秒级 分钟级
执行性能 和物理系统几乎一致 VM会占用一些资源
镜像体积 镜像MB级别 虚拟机镜像GB级别
管理效率 管理简单 组件相互依赖,管理复杂
隔离性 隔离性高 彻底隔离
可管理性 单进程、不建议启动SSH 完整的系统管理
网络连接 比较弱 借助neutron管理OpenStack环境中虚拟网络

Docker 优点

  1. 简化程序
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发不到任何流行的Linux机器上,便可以实现虚拟化。
    Docker改变了虚拟化的方式,在Docker容器的处理下,只需要数秒就能完成。

  2. 多样性
    Docker可以简化部署多种应用实例工作。

  3. 节省开支
    云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,
    让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker的应用场景

  1. 需要简化配置(测试环境与生产环境不同)
  2. 代码管理
  3. 提升开发效率
  4. 应用隔离
  5. 服务器整合
  6. 调试
  7. 多终端、多租户
  8. 需要快速部署与环境一致性

Docker安装与配置

安装Docker

1
2
yum install docker -y
systemctl start docker

下载镜像文件

1
2
3
4
5
6
7
8
[root@centos7 ~]# docker pull centos:latest
Trying to pull repository docker.io/library/centos ...
centos7: Pulling from docker.io/library/centos
93857f76ae30: Pull complete
Digest: sha256:4eda692c08e0a065ae91d74e82fff4af3da307b4341ad61fa61771cc4659af60
[root@centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos centos7 a8493f5f50ff 3 days ago 192.5 MB

删除镜像

1
docker rmi 容器ID

Docker容器创建与管理

  1. 创建容器
  • 方法一
    1
    2
    3
    docker run centos /bin/echo "nihao"  ##创建容器

    docker ps -a ## 查看所有容器

注:没有指定容器名称,自动命名,状态是自动退出

  • 方法二 创建一个自定义名称的容器
    1
    2
    3
    docker run --name mgg -i -t centos /bin/bash  ## 名称 分配伪终端 -i 处于打开状态

    ps -ef

docker ps -a是显示所有容器包括没有运行的

  1. 进入、退出、启动容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    exit ##退出容器

    docker start 2db7f1389dbd ## 启动容器
    或
    docker start mgg

    docker attach 2db7f1389dbd ##进入容器(必须是启动状态下)

    hostname ##容器中执行命令 hostname

这种进入方式,退出后容器进入Down状态,如下:

1
2
3
exit 

docker ps

  1. 使用nsenter命令进入容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    nsenter --help

    Usage:
    nsenter [options] <program> [<argument>...]
    Run a program with namespaces of other processes.
    Options:
    -t, --target <pid> target process to get namespaces from
    -m, --mount[=<file>] enter mount namespace
    -u, --uts[=<file>] enter UTS namespace (hostname etc)
    -i, --ipc[=<file>] enter System V IPC namespace
    -n, --net[=<file>] enter network namespace
    -p, --pid[=<file>] enter pid namespace
    -U, --user[=<file>] enter user namespace
    -S, --setuid <uid> set uid in entered namespace
    -G, --setgid <gid> set gid in entered namespace
    --preserve-credentials do not touch uids or gids
    -r, --root[=<dir>] set the root directory
    -w, --wd[=<dir>] set the working directory
    -F, --no-fork do not fork before exec'ing <program>
    -Z, --follow-context set SELinux context according to --target PID
    -h, --help display this help and exit
    -V, --version output version information and exit

获取容器PID

1
2
3
4
5
6
7
8
9
10
docker inspect --format "{{.State.Pid}}" 2db7f1389dbd 
4580

nsenter -t 4580 -u -i -n -p

hostname

eixt

docker ps

  1. 删除容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker ps -a

    docker rm 容器ID ## 删除一个已停止的容器

    docker rm -f 容器ID ##删除一个正在运行的容器

    docker ps -a

    docker run --rm centos /bin/echo "hello" ##创建时自动删除,用于测试

    docker --kill $(docker ps -a -q) ## 删除正在运行的容器

Docker网络模式

Docker通过使用Linux桥连接提供容器之间的通信,Docker的网络模式有四种:

  • host模式,使用–net=host 指定
  • container模式,使用–net=container:容器名或容器ID指定
  • none模式,使用–net=none 指定
  • bridge模式,使用–net=bridge 指定,默认配置

host模式

如果容器使用 host 模式,那么容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡与配置 IP 等,
而是使用宿主机的 IP 和端口。就和直接跑在宿主机中一样。但是容器的文件系统、进程列表等还是和宿主机隔离的。

container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡与配置 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他方面仍然是隔离的。

none模式

此模式不同于前两种,Docker 容器有自己的 Network Namespace,但是,Docker容器没有任何网络配置。而是需要我们手动给 Docker容器添加网卡、配置 IP 等

bridge模式

此模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace,并将一个主机上的Docker容器连接到一个虚拟网桥上。

##运行容器

1
2
3
docker run -d -P nginx ##-d启动到后台运行

docker ps

参数说明:
docker -P 随机端口映射
docker -p 指定端口映射
-p hostport:containerport
-p ip:hostport:containerport

实例说明

1
docker run -d -p 81:80  nginx ##指定端口81映射容器80端口

Docker数据存储

docker管理数据的方式有两种:

  • 数据卷
  • 数据卷容器

数据卷

数据卷是一个或多个容器专门指定绕过Union File System的目录,为持续性或共享数据提供一些有用的功能:

  • 数据卷可以在容器间共享和重用
  • 数据卷数据改变是直接修改的
  • 数据卷数据改变不会被包括在容器中
  • 数据卷是持续性的,直到没有容器使用它们

参数说明:
-v /data直接将数据目录挂载到容器 /data目录
-v src:dist 将物理机目录挂载到容器目录

实例操作

1
2
3
4
5
6
7
8
9
10
11
docker run -it --name test-001 -v /data centos

ls -l /data/

docker ps

docker inspect 容器ID ##找到source目录

cd source目录
ll
mkdir test ##创建目录然后到容器里查看

容器里查看数据

1
2
3
cd /data/   ##这个是容器里的目录
ll
##可以看到刚才新建的test目录

使用下面的方法挂载

1
2
docker run -it -v /data1:/mnt centos
## 前者是物理机目录,后者是容器目录

  • 此种方法适合开发代码管理,代码目录直接挂载到容器中,修改WEB站点目录即可访问
    1
    2
    docker run -it -v /data2:/opt:ro centos
    ##指定只读权限进行挂载
1
2
docker run -it -v /data2:/opt:rw centos
##指定读写权限进行挂载
1
2
docker run -it -v /root/file1:file1 centos
##挂载单个文件到容器目录

容器卷的方式

–volumes-from 使用其它容器的目录

1
2
3
4
5
6
7

docker run -d --name mydocker -v /data centos
3********************************b

docker run -it --name mynfs --volumes-from mydocker centos

ll /data/

对mydocker容器/data目录写入数据进行测试

1
2
3
4
5
cd /var/lib/docker/volumes/3********************************b/_data

ls
echo "welcome to here">file
ll

再查看刚刚的容器中是否有数据

1
2
3
hostname
cd /data/
ll

陋室铭

Centos7系统实时监控之Telegraf+influxdb+grafana

发表于 2018-07-09 | 阅读次数

创建文件/etc/yum.repos.d/influxdata.repo

1
sudo vi /etc/yum.repos.d/influxdata.repo

编辑内容

1
2
3
4
5
6
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

安装InfulxDB

1
2
3
4
5
sudo yum install influxdb

或

docker pull influxdb

启动

1
sudo systemctl start influxdb

查看是否正常运行

1
2
3
4
5
6
7
8
9
10
systemctl status influxdb

● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2018-07-06 14:08:56 CST; 17s ago
Docs: https://docs.influxdata.com/influxdb/
Main PID: 1879 (influxd)
Memory: 6.2M
CGroup: /system.slice/influxdb.service
└─1879 /usr/bin/influxd -config /etc/influxdb/influxdb.conf

启动influxdb控制台

1
influx

创建一个admin用户,作为管理用户

1
create user "admin" with password 'admin' with all privileges

验证是否已创建用户:

1
2
3
4
5
show users

user admin
---- -----
admin true

退出控制台

1
exit

修改/etc/influxdb/influxdb.conf,这是influxdb的配置文件

1
2
3
4
5
6
7
[http]
# Determines whether HTTP endpoint is enabled.
# enabled = true
# The bind address used by the HTTP service.
# bind-address = ":8086"
# Determines whether HTTP authentication is enabled.
auth-enabled = true

保存文件,重启influxdb服务

1
sudo systemctl restart influxdb

infulxdb已配置,安装Telegraf

安装和配置Telegraf

1
2
3
4
5
sudo yum install telegraf

或

docker pull telegraf

Telegraf使用插件来输入和输出数据,默认输出插件用于influxdb。由于我们启用了influxdb的身份认证,
我们修改Telegraf的配置文件以指定我们配置的用户和密码。

1
sudo vi /etc/telegraf/telegraf.conf

找到[outputs.influxdb]部分提供用户名和密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[[outputs.influxdb]]
## The full HTTP or UDP endpoint URL for your InfluxDB instance.
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required

...

## Write timeout (for the InfluxDB client), formatted as a string.
## If not provided, will default to 5s. 0s means no timeout (not recommended).
timeout = "5s"
username = "sammy"
password = "sammy_admin"
## Set the user agent for HTTP POSTs (can be useful for log differentiation)
# user_agent = "telegraf"
## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
# udp_payload = 512

保存文件,退出编辑器,然后启动Telegraf:

1
sudo systemctl start telegraf

然后检查服务是否正常运行

1
2
3
4
5
6
7
8
9
10
systemctl status telegraf

● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2018-07-06 14:33:23 CST; 18s ago
Docs: https://github.com/influxdata/telegraf
Main PID: 2252 (telegraf)
Memory: 10.8M
CGroup: /system.slice/telegraf.service
└─2252 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /et...

Telegraf现在正在收集数据并将其写入influxdb。登录influxdb的控制台

1
influx -username 'admin' -password 'admin'

登录后,执行以下命令查看可用的数据库

1
show databases

查看输出的数据库:

1
2
3
4
5
name: databases
name
----
_internal
telegraf

查看telegraf数据库

1
user telegraf

显示Telegraf通过执行此命令收集的各种测量

1
2
3
4
5
6
7
8
9
10
11
12
13
show measurements

name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system

在终端窗口中运行telegraf -usage plugin-name,可以查看每个输入插件的使用说明。

安装Grafana及配置

Grafana下载

1
2
3
4
5
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm 
sudo yum localinstall grafana-5.2.1-1.x86_64.rpm

或
docker run -d --name=grafana -p 3000:3000 grafana/grafana

配置告警邮箱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd /etc/grafana
vi grafana.ini

[smtp]
enabled = true
host = smtp.qq.com:587
user= xxx@qq.com
password= xxx
;cert_file=
;key_file=
skip_verify= true
from_address= xxx@qq.com
from_name= xxx
;ehlo_identity = dashboard.example.com

[emails]
;welcome_email_on_sign_up=false

启动服务、添加开机启动

1
2
3
4
5
6
7
systemctl daemon-reload

systemctl start grafana-server

systemctl status grafana-server

systemctl enable grafana-server.service

Grafana使用及配置
登录http://localhost:3000,默认用户名 admin,密码:admin

连接数据源后,进入dashboard页面,创建仪表盘。可以通过https://grafana.com/dashboards来查看已经由其他用户共享的仪表盘
选取https://grafana.com/dashboards/1443 这个仪表盘,该仪表盘基本涵盖了一个系统需要监控的相关参数

Telegraf相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

[[inputs.net]]
interfaces= ["eth0,eth1,Io"]


[[inputs.cpu]]
percpu= true

totalcpu = true

collect_cpu_time = false

[[inputs.disk]]
ignore_fs =["tmpfs","devtmpfs"]

[[inputs.diskio]]
## Bydefault, telegraf will gather stats for all devices including

##disk partitions.

##Setting devices will restrict the stats to the specified devices.

#devices = ["sda", "sdb"]

##Uncomment the following line if you need disk serial numbers.

#skip_serial_number = false

[[inputs.kernel]]
# noconfiguration

[[inputs.mem]]
# noconfiguration

[[inputs.processes]]
# noconfiguration

[[inputs.swap]]

[[inputs.system]]

[[inputs.netstat]]

通过对任意监控项进行编辑可以增加告警规则

123…6
icefire

icefire

Stick with it,and keep moving.

53 日志
15 分类
21 标签
GitHub
© 2016 - 2021 icefire 辽ICP备16011524号-1
由 Hexo 强力驱动
主题 - NexT.Pisces