Author Archives: Node
ElasticSearch 之 Kibana 二进制安装配置
介绍:
Kibana 是一个开源分析数据可视化平台。你可以使用 Kibana 对数据进行高效的搜索、可视化、分析,还可以与 Elasticsearch 搜索引擎之中的数据进行交互。
Kibana 可以轻松掌握大量的数据。 其基于浏览器的界面使您能够快速创建共享动态仪表板,实时监控 ElasticSearch 的查询与更改。
先决条件:
要求:Kibana 与 Elasticsearch 的版本必须一致。
1.创建用户和组
$ groupadd kibana $ useradd -g kibana kibana
2.安装 Kibana
下载地址://www.elastic.co/products
解压创建软连接:
$ cd /tmp $ sha1sum kibana-5.6.3-linux-x86_64.tar.gz $ tar zxvf kibana-5.6.3-linux-x86_64.tar.gz $ mv kibana-5.6.3-linux-x86_64 /usr/local $ cd /usr/local $ ln -s kibana-5.6.3-linux-x86_64 kibana
3.配置 kibana
配置完成后的内容如下:
$ egrep -v "^$|^#|^;" /usr/local/kibana/config/kibana.yml server.port: 5601 server.host: "10.28.204.65" server.name: "10.28.204.65" elasticsearch.url: "//10.28.204.65:9200" elasticsearch.preserveHost: true elasticsearch.pingTimeout: 1500 elasticsearch.requestTimeout: 30000 pid.file: /usr/local/kibana/kibana.pid更多配置请参阅配置 Kibana。
4.赋予 Kibana 目录权限
$ cd /usr/local $ chown -R kibana.kibana kibana*
5.启动 kibana
$ cd /usr/local/kibana/bin $ ./kibanalog [02:01:19.285] [info][status][plugin:kibana@5.6.3] Status changed from uninitialized to green - Ready log [02:01:19.819] [info][status][plugin:elasticsearch@5.6.3] Status changed from uninitialized to yellow - Waiting for Elasticsearch log [02:01:20.078] [info][status][plugin:console@5.6.3] Status changed from uninitialized to green - Ready log [02:01:20.288] [info][status][plugin:metrics@5.6.3] Status changed from uninitialized to green - Ready log [02:01:21.263] [info][status][plugin:timelion@5.6.3] Status changed from uninitialized to green - Ready log [02:01:21.306] [info][listening] Server running at //10.28.204.65:5601 log [02:01:21.315] [info][status][ui settings] Status changed from uninitialized to yellow - Elasticsearch plugin is yellow log [02:01:25.304] [info][status][plugin:elasticsearch@5.6.3] Status changed from yellow to yellow - No existing Kibana index found log [02:01:29.992] [info][status][plugin:elasticsearch@5.6.3] Status changed from yellow to green - Kibana index ready log [02:01:30.008] [info][status][ui settings] Status changed from yellow to green - Ready打印出了启动状态,已经启动成功。
现在你可以使用 //10.28.204.65:5601 进行访问配置即可。
6.创建 systemctl 系统 Kibana 单元文件
我们需要创建单元服务文件,目的是为了便于管理:
$ vim /usr/lib/systemd/system/kibana.service添加以下内容:
[Unit] Description=Kibana [Service] Type=simple User=kibana Group=kibana # Load env vars from /etc/default/ and /etc/sysconfig/ if they exist. # Prefixing the path with '-' makes it try to load, but if the file doesn't # exist, it continues onward. EnvironmentFile=-/usr/local/kibana/config EnvironmentFile=-/etc/sysconfig/kibana ExecStart=/usr/local/kibana/bin/kibana "-c /usr/local/kibana/config/kibana.yml" Restart=always WorkingDirectory=/ [Install] WantedBy=multi-user.target
7.启动并加入开机启动
$ systemctl restart kibana $ systemctl enable kibana
8.设置防火墙
$ firewall-cmd --permanent --zone=public --add-port=5601/tcp $ firewall-cmd --reload
到目前为止 Kibana 已经安装完成,并可以正常使用。
安装配置 Elasticsearch 搜索引擎集群
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,实时地存储,搜索和分析大量数据。它通常用作为具有复杂的搜索功能和要求的应用程序提供的底层引擎技术。
Elasticsearch 安装方式如同Tomcat,开箱即用,无需安装复杂的依赖包。
先决条件:
Elasticsearch至少需要Java 8版本。以下是安装文档,所以我们在这里不再赘述。
集群部署环境及设备配置:
/台/16G/8核/500G 10.28.204.62 10.28.204.63 10.28.204.64 10.28.204.65 Elasticsearch 5.6.3 CentOS Linux release 7.4.1708 (Core) Kernel: Linux 3.10.0-693.2.2.el7.x86_64
说明:以下安装步骤,我在 10.28.204.65 服务器操作,其他机器均相同,我会标注集群重点部分。
1.创建用户及组并设置密码
$ groupadd es $ useradd -g es es $ passwd es
2.安装 Elasticsearch
下载地址 //www.elastic.co/downloads/elasticsearch#ga-release
解压:
$ cd /tmp $ tar zxvf elasticsearch-5.6.3.tar.gz移动目录并创建软连接:
$ mv elasticsearch-5.6.3 /usr/local $ cd /usr/local $ ln -s elasticsearch-5.6.3 elasticsearch设置目录用户权限:
$ chown -R es.es elasticsearch*
3.配置 jvm.options
Elasticsearch默认堆内存为2 GB,无法满足需求,需要将以下文件中的2个Xms、Xmx修改为8G即可,其他默认。
$ vim /usr/local/elasticsearch/config/jvm.options ... -Xms8g -Xmx8g ...注意:建议分配机器物理内存一半大小,最大不要超过32GB。
4.配置 elasticsearch.yml
配置后的内容如下:
$ egrep -v "(^#|^$)" /usr/local/elasticsearch/config/elasticsearch.ymlcluster.name: my-apprenwole #集群名称,任意。ES启动后会将具有相同集群名字的节点放到一个集群下。 node.name: renwolenode-1 #节点名称 任意 唯一值。 bootstrap.memory_lock: false #关闭锁定内存。 network.host: 10.28.204.65 #本机IP地址,每个节点都要修改。 http.port: 9200 #http访问端口为了安全建议修改。 discovery.zen.ping.unicast.hosts: ["10.28.204.62","10.28.204.63", "10.28.204.64","10.28.204.65"] #当新节点启动时,传递主机的初始列表以执行发现。如果端口不是默认,需加上端口。 discovery.zen.minimum_master_nodes: 3 #指定集群节点中有几个有master资格的节点。如果是多个集群可以写3个以上。 client.transport.ping_timeout: 120s #等待来自节点的ping响应的时间。默认为60s。 discovery.zen.ping_timeout: 120s #允许选举时间处理速度慢或拥塞网络的情况下的调整(较高的值保证故障少的几率)。 http.cors.enabled: true #启用或禁用跨原始资源共享,即;另一来源上的浏览器是否可以针对Elasticsearch执行请求。 http.cors.allow-origin: "*" #默认为不允许来源。如果您预先添加并附/加到该值,则将其视为正则表达式,允许您支持HTTP和HTTP。例如使用/https?:\/\/localhost(:[0-9]+)?/将在两种情况下适当返回请求头。*是一个有效的值,但被认为是一个安全风险,因为您的弹性搜索实例可以从任何地方交叉发起请求。说明:Elasticsearch默认值配置具有良好设置,并且需要很少的配置,默认经过少许配置即可用于生产。
更多配置信息,请参阅 Elasticsearch modules
注:其他三台机器除以下参数不同,其他均为相同:
node.name network.host
5.Memlock设置
在该文件中添加以下内容:
$ vim /etc/security/limits.conf es soft memlock unlimited es hard memlock unlimited es - nofile 65536如果不添加,启动的时候会报警告信息:
Unable to lock JVM Memory: error=12, reason=Cannot allocate memory This can result in part of the JVM being swapped out. Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536 These can be adjusted by modifying /etc/security/limits.conf, for example: # allow user 'es' mlockall es soft memlock unlimited es hard memlock unlimited以上错误信息还给出了解决方案。
6.服务器内存设置
$ vim /etc/sysctl.conf vm.max_map_count=262144 $ sysctl -p
7.启动 Elasticsearch
由于ES默认不允许root直接启动,这是为了安全起见,下面切换为 es 账号启动:
[root@102820465 ~]# su es [es@102820465 ~]$ cd /usr/local/elasticsearch/bin [es@102820465 bin]$ ./elasticsearch[INFO ][o.e.n.Node ] [renwolenode-1] initializing ... [INFO ][o.e.e.NodeEnvironment ] [renwolenode-1] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [4021.3mb], net total_space [15.9gb], spins? [unknown], types [rootfs] [INFO ][o.e.e.NodeEnvironment ] [renwolenode-1] heap size [7.9gb], compressed ordinary object pointers [true] [INFO ][o.e.n.Node ] [renwolenode-1] node name [renwolenode-1], node ID [vkixu3LZTPq82SAWWXyNcg] [INFO ][o.e.n.Node ] [renwolenode-1] version[5.6.3], pid[21425], build[667b497/2017-10-18T19:22:05.189Z], OS[Linux/3.10.0-514.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_144/25.144-b01] [INFO ][o.e.n.Node ] [renwolenode-1] JVM arguments [-Xms8g, -Xmx8g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/usr/local/elasticsearch] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [aggs-matrix-stats] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [ingest-common] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [lang-expression] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [lang-groovy] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [lang-mustache] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [lang-painless] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [parent-join] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [percolator] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [reindex] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [transport-netty3] [INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded module [transport-netty4] [INFO ][o.e.p.PluginsService ] [renwolenode-1] no plugins loaded [INFO ][o.e.d.DiscoveryModule ] [renwolenode-1] using discovery type [zen] [INFO ][o.e.n.Node ] [renwolenode-1] initialized [INFO ][o.e.n.Node ] [renwolenode-1] starting ... [INFO ][o.e.t.TransportService ] [renwolenode-1] publish_address {10.28.204.65:9300}, bound_addresses {10.28.204.65:9300} [INFO ][o.e.b.BootstrapChecks ] [renwolenode-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks [WARN ][o.e.n.Node ] [renwolenode-1] timed out while waiting for initial discovery state - timeout: 30s [INFO ][o.e.h.n.Netty4HttpServerTransport] [renwolenode-1] publish_address {10.28.204.65:9200}, bound_addresses {10.28.204.65:9200} [INFO ][o.e.n.Node ] [renwolenode-1] started
节点成功启动,状态:started 启动后当前终端会一直显示 ElasticSearch 状态信息。
假如启动失败,会显示详细错误说明,根据报错解决即可。
如果退出按 Ctrl + c 同时 ElasticSearch 也会停止。
8.重开一个终端访问ES
$ curl //10.28.204.65:9200/ { "name" : "renwolenode-1", "cluster_name" : "my-apprenwole", "cluster_uuid" : "Xf_ZdW0XQum4rycQA40PfQ", "version" : { "number" : "5.6.3", "build_hash" : "667b497", "build_date" : "2017-10-18T19:22:05.189Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" }返回ES的部分信息,说明ES可以正常使用。
9.创建 systemd 单元服务文件
事实上我们在生产环境中,管理ES的时候,不可能来回切换账号用 ./elasticsearch 方式启动。若Elasticsearch服务器宕机恢复时无法随机启动,就会给运维人员带来不必要的麻烦。
因此创建开机自启动文件:
$ vim /usr/lib/systemd/system/elasticsearch.service添加以下内容:
[Service] Environment=ES_HOME=/usr/local/elasticsearch Environment=CONF_DIR=/usr/local/elasticsearch/config Environment=DATA_DIR=/usr/local/elasticsearch/data Environment=LOG_DIR=/usr/local/elasticsearch/logs Environment=PID_DIR=/usr/local/elasticsearch EnvironmentFile=-/usr/local/elasticsearch/config WorkingDirectory=/usr/local/elasticsearch User=es Group=es ExecStartPre=/usr/local/elasticsearch/bin/elasticsearch-systemd-pre-exec ExecStart=/usr/local/elasticsearch/bin/elasticsearch \ -p ${PID_DIR}/elasticsearch.pid \ --quiet \ -Edefault.path.logs=${LOG_DIR} \ -Edefault.path.data=${DATA_DIR} \ -Edefault.path.conf=${CONF_DIR} # StandardOutput is configured to redirect to journalctl since # some error messages may be logged in standard output before # elasticsearch logging system is initialized. Elasticsearch # stores its logs in /var/log/elasticsearch and does not use # journalctl by default. If you also want to enable journalctl # logging, you can simply remove the "quiet" option from ExecStart. StandardOutput=journal StandardError=inherit # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of processes LimitNPROC=2048 # Specifies the maximum size of virtual memory LimitAS=infinity # Specifies the maximum file size LimitFSIZE=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=0 # SIGTERM signal is used to stop the Java process KillSignal=SIGTERM # Send the signal only to the JVM rather than its control group KillMode=process # Java process is never killed SendSIGKILL=no # When a JVM receives a SIGTERM signal it exits with code 143 SuccessExitStatus=143 [Install] WantedBy=multi-user.target # Built for distribution-5.6.3 (distribution)
10.重启 elasticsearch
$ systemctl restart elasticsearch注:重启ES后不会立即运行,它有一个启动过程,约1min左右,即可通过 ss -ntlp 查看 9200、9300是否运行,运行后再查看集群状态。
11.设置 Firewalld 防火墙
$ firewall-cmd --permanent --add-port={9200/tcp,9300/tcp} $ firewall-cmd --reload $ firewall-cmd --list-all
12.查看集群状态
在集群中输入以下URL即可获取集群健康状态信息:
$ curl //10.28.204.65:9200/_cluster/health?pretty { "cluster_name" : "my-apprenwole", //集群名称 "status" : "green", //集群的状态分为:红/绿/灯,绿:健康,黄:亚健康,红:病态 "timed_out" : false, "number_of_nodes" : 4, //节点数 "number_of_data_nodes" : 4, //数据节点 "active_primary_shards" : 6, //主分片总数 "active_shards" : 22, //集群内所有索引的分片总数 "relocating_shards" : 0, //正在迁移中的分片数 "initializing_shards" : 0, //正在初始化的分片数 "unassigned_shards" : 0, //未分配到具体节点上的分片数 "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 //活动碎片百分比 }我们采用4台ES实例,所以集群也显示了具体数据,说明集群运行正常。
ES集群已经安装完成。此文为原创内容,可直接用于生产。ES有很多插件,后期我会写一些相关文档,例如:Kibana、Logstash、X-Pack 这些插件都是官方插件,相当实用。
禁用 Transparent Huge Pages (THP) 透明巨大页面
Transparent Huge Pages (THP)
是一种Linux内存管理系统,可以通过使用更大的内存页来减少对带有大量内存的机器Translation Lookaside Buffer (TLB)的开销。
然而,数据库工作负载通常在THP上表现不佳,因为它们往往是稀疏而非连续性的内存访问模式。所以你应该禁用Linux机器上的THP,以确保Redis、ORACLE、MariaDB、MongoDB等数据库的最佳性能。
Transparent Huge Pages
是在CentOS/RedHat 6.0中引入的优化,从CentOS 7 版本开始,该特性默认启用,其目的是减少大量内存的系统的开销。然而,由于某些数据库使用内存的方式,这个特性实际上弊大于利,因为内存访问很少是连续的。
下面介绍如何禁用RedHat/CentOS 6/7上的透明巨大页面。对于其他系统,请查阅供应商的文档。
生产环境:
$ hostnamectl ... Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7.4 1708 Kernel: Linux 3.10.0-693.2.2.el7.x86_64 Architecture: x86-64
先查看 THP 状态:
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never $ cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
状态显示:启用。
创建脚本:
$ vim /etc/init.d/disable-transparent-hugepages
添加以下内容:
#!/bin/bash ### BEGIN INIT INFO # Provides: disable-transparent-hugepages # Required-Start: $local_fs # Required-Stop: # X-Start-Before: mongod mongodb-mms-automation-agent # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Disable Linux transparent huge pages # Description: Disable Linux transparent huge pages, to improve # database performance. ### END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' > ${thp_path}/enabled echo 'never' > ${thp_path}/defrag re='^[0-1]+$' if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]] then # RHEL 7 echo 0 > ${thp_path}/khugepaged/defrag else # RHEL 6 echo 'no' > ${thp_path}/khugepaged/defrag fi unset re unset thp_path ;; esac
保存并退出!
给予该文件可执行权限,命令如下:
$ chmod 755 /etc/init.d/disable-transparent-hugepages
加入开机自启动并重启系统:
$ systemctl enable disable-transparent-hugepages $ systemctl start disable-transparent-hugepages $ sudo reboot
再次查看THP状态:
$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] $ cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never]
状态显示:已经禁用。
到此 禁用 Transparent Huge Pages
的目的已经实现。
注意:该教程不适用于Debian/Ubuntu或CentOS/RedHat 5 及更低版本。原因上述已说明。
Nginx 反向代理实现 Kibana 登录认证功能
Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。
下面我将操作如何使用Nginx反向代理实现kibana的认证功能。
先决条件:
1.安装 Apache Httpd 密码生成工具
$ yum install httpd-tools -y
2.生成Kibana认证密码
$ mkdir -p /usr/local/nginx/conf/passwd $ htpasswd -c -b /usr/local/nginx/conf/passwd/kibana.passwd Userrenwolecom GN5SKorJ Adding password for user Userrenwolecom
3.配置Nginx反向代理
在Nginx配置文件中添加如下内容(或新建配置文件包含):
$ vim /usr/local/nginx/conf/nginx.conf server { listen 10.28.204.65:5601; auth_basic "Restricted Access"; auth_basic_user_file /usr/local/nginx/conf/passwd/kibana.passwd; location / { proxy_pass //10.28.204.65:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
4.配置Kibana
取消下面注释:
$ vim /usr/local/kibana/config/kibana.yml server.host: "10.28.204.65"
5.重启 Kibana 及 Nginx 服务使配置生效
$ systemctl restart kibana.service $ systemctl restart nginx.service
接下来浏览器访问 //103.28.204.65:5601/ 会提示验证弹窗,输入以上生成的用户密码登录即可。
Zabbix 监控 Redis 数据库性能
说明:以下所有操作均在 Zabbix Agent 客户端操作。
部署环境:
OS:CentOS Linux release 7.4.1708 (Core) x64 Zabbix Servers:3.4 Redis Servers:4.0
先决条件:
1.修改主机 Host
文件末端添加以下内容:
$ vim /etc/hosts 10.28.204.65 s102820465
2.安装 Python 依赖包
$ yum -y install python-pip $ pip install argparse $ pip install redis
3.下载 Zabbix 官方提供的 Template Redis 模板
将下载到本地的压缩包传入到tmp目录后解压:
//github.com/adubkov/zbx_redis_template
$ cd /tmp $ tar zxvf zbx_redis_template-master.zip $ cd zbx_redis_template-master将以下2个配置文件拷贝到相关目录:
$ cp zbx_redis_stats.py /usr/local/zabbix/bin $ cp zbx_redis.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/注意:除上面两个文件外,其他的可以忽略。因为官方Zabbix template 模板提供了两种监控redis的方案,分别是 node.js 、python。本文教程采用后者。
4.配置zbx_redis_stats.py
将以下文件中的参数修改为 Zabbix Server 主机IP及端口:
$ cd /usr/local/zabbix/bin $ vim zbx_redis_stats.py ... zabbix_host = '10.28.204.62' # Zabbix Server IP zabbix_port = 10051 # Zabbix Server Port ...给该文件可执行权限:
$ chmod +x zbx_redis_stats.py
5.配置zbx_redis.conf
$ cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/将文件修改为以下内容:
$ vim zbx_redis.conf UserParameter=redis[*],/usr/local/zabbix/bin/zbx_redis_stats.py -p 6379 -a RenwoleQxl5qpKHrh $1 $2 $3
6.测试zbx_redis_status.py是否可以连接 Redis 数据库
$ cd /usr/local/zabbix/bin $ ./zbx_redis_stats.py -h 127.0.0.1 -p 6379 -a RenwoleQxl5qpKHrh usage: zbx_redis_stats.py [-h] [-p REDIS_PORT] [-a REDIS_PASS] [redis_hostname] [metric] [db] Zabbix Redis status script positional arguments: redis_hostname metric db optional arguments: -h, --help show this help message and exit -p REDIS_PORT, --port REDIS_PORT Redis server port -a REDIS_PASS, --auth REDIS_PASS Redis server pass出现以上内容说明连接正常。
参数说明:
-h Redis bind 地址
-p Redis端口
-a Redis密码
7.测试是否获取到数据
$ ./zbx_redis_stats.py -p 6379 -a RenwoleQxl5qpKHrh S102820465 used_cpu_user_children none 0.71返回 0.71,此值不固定,只要有数据返回,说明脚本运行正常。
参数说明:
zbx_redis.conf文件中的$1 $2 $3这时就派上用场了。
$1 对应 S102820465 主机Host
$2 对应 used_cpu_user_children
$3 对应 none
最后将 zbx_redis_templates.xml 模板导入到 Zabbix Servers UI 中,然后链接到需要监控的主机即可。
如果在Zabbix UI中无法获取的到数据,可以在 Zabbix Agent 客户端直接运行 zbx_redis_stats.py 脚本,如果有配置不正确的地方,会反馈出来,再根据报错处理即可。
结语:
其实监控redis状态的模板太多了,基本都是大同小异,选择一个适合自己的,比如监控项目非常多的,这样就可以了解redis更多性能指标。
Zabbix 监控 Nginx status 性能
其实zabbix对nginx的服务状态监控,网上有很多相关模板以及设置方法,根据自己的需求修改即可,后期我会写一些比较详细用于生产环境中的一些教程。
部署环境:
OS:CentOS 7.4
WEB: Nginx 1.3
监控:Zabbix 3.4
先决条件:
注意:主要是 –with-http_stub_status_module 模块。
1.修改 nginx.conf
在 server 段 添加以下内容:
$ vim /usr/local/nginx/conf/nginx.conf location /stub_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
2.重启Nginx服务并测试访问
$ systemctl restart nginx.service $ curl //127.0.0.1/stub_status Active connections: 1 server accepts handled requests 304 304 304 Reading: 0 Writing: 1 Waiting: 0访问返回数据说明Nginx配置正常.
3.创建 Nginx 监控脚本
将以下代码复制保存为 nginx.sh
$ cd /usr/local/zabbix/bin $ vim nginx.sh#!/bin/bash HOST="127.0.0.1" PORT="80" stub_status=stub_status function check() { /sbin/pidof nginx | wc -l } function active() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function accepts() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $3}' } function reading() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting() { /usr/bin/curl -s "//$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } case "$1" in check) check ;; active) active ;; accepts) accepts ;; handled) handled ;; requests) requests ;; reading) reading ;; writing) writing ;; waiting) waiting ;; *) echo $"Usage $0 {check|active|accepts|handled|requests|reading|writing|waiting}" exit esac
4.给该脚本执行权限
$ chmod 755 nginx.sh
5.创建 userparameter_nginx.conf 配置文件
$ cd /usr/local/zabbix/etc/zabbix_agentd.conf.d添加以下内容:
$ vim userparameter_nginx.confUserParameter=nginx.status[*],/usr/local/zabbix/bin/nginx.sh $1
6.重启 zabbix
$ systemctl restart zabbix-agent.service
7.导入 zbx_nginx_templates.xml 模板
导入模板添加主机链接到 Template App Nginx 模板即可。
Zabbix 3.4 JMX 监控 Tomcat 性能
先决条件:
《Zabbix Servers 3.4 源代码编译安装》
《Linux Apache Tomcat 8.5 安装与配置》
如果完成了以上安装的部署,继续下一步。
Zabbix服务器端配置:
1.配置 zabbix_server.conf
主要参数:
... #JavaGateway服务器地址,zabbix-server与zabbix_java_gateway在同台服务器。 JavaGateway=10.10.204.62 JavaGatewayPort=10052 #设置javaGateway抓取数据的进程数,当设置为0时表示不具有抓取java信息的能力。 StartJavaPollers=5 ...在Zabbix Servers安装过程中,以上参数我已经配置完成。
2.配置 Zabbix Java gateway
修改完成后的内容如下:
$ egrep -v '^#|^$' /usr/local/zabbix/sbin/zabbix_java/settings.sh #Zabbix Servers IP LISTEN_IP="0.0.0.0" #Port LISTEN_PORT=10052 #PID_FILE路径必须正确。 PID_FILE="/usr/local/zabbix/sbin/zabbix_java/zabbix_java.pid" #START_POLLERS项是配置启动的进出数,若不配置 zabbix_java 依旧可以启动但无法抓取数据。 START_POLLERS=5 #网络超时时间。 TIMEOUT=3
3.启动 zabbix_java
$ /usr/local/zabbix/sbin/zabbix_java/startup.sh启动后可通过 ss -ntlp 查看 10052 端口是否运行。
Zabbix Agent Tomcat 客户端配置:
1.在 catalina.sh文件 Execute The Requested Command 上行或最上面添加以下内容:
$ vim /usr/local/tomcat/bin/catalina.shexport CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.10.204.65"
含义说明:
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote #启用JMX远程监控。 -Dcom.sun.management.jmxremote.ssl=false #是否使用SSL。 -Dcom.sun.management.jmxremote.authenticate=false #是否开启认证。 -Djava.rmi.server.hostname=10.10.204.65" #Tomcat所在服务器IP。
2.修改Tomcat server.xml 配置文件
在 <Server port=”8005″ shutdown=”SHUTDOWN”> 换行添加以下内容:
$ vim /usr/local/tomcat/conf/server.xml<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10053" rmiServerPortPlatform="10053"/>
3.重启 Tomcat 服务
$ systemctl restart tomcat
4.设置 Firewalld
$ firewall-cmd --zone=public --add-port=10053/tcp --permanent $ firewall-cmd --reload
5.在 Zabbix server 检测数据
在zabbix 服务端使用 cmdline-jmxclient-0.10.3.jar 检测是否可以抓取数据
$ java -jar /tmp/cmdline-jmxclient-0.10.3.jar - 10.10.204.65:10053 java.lang:type=Memory NonHeapMemoryUsage 09/15/2017 19:06:49 +0800 org.archive.jmx.Client NonHeapMemoryUsage: committed: 33406976 init: 2555904 max: -1 used: 32079720成功获取数据。
之后在zabbix web界面添加主机并链接模板即可。
Template App Apache Tomcat JMX
Template App Generic Java JMX
以上两个模板是系统默认的,添加即可,其中有一些参数不通用,需要手动修改。
Zabbix 3.4 监控 MariaDB(MySQL) 数据库性能
先决条件:
首先你需要安装 Zabbix Servers 及 Zabbix-agentd 端:
《Zabbix Servers 3.4 源代码编译安装》
《Centos 7 Zabbix Agent 客户端源码编译安装配置》
1.配置 userparameter_mysql.conf
Zabbix源码中包含了 userparameter_mysql.conf 配置文件,只需要将其拷贝到zabbix_agentd.conf.d目录下:
$ find / -name userparameter_mysql.conf $ cd /tmp/zabbix-3.4.2/conf/zabbix_agentd/ $ cp userparameter_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/
2.修改 zabbix_agentd.conf
因为我们将userparameter_mysql.conf文件放在了zabbix_agentd.conf.d目录,所以需要取消下面注释,这样Zabbix Agent才能够加载此文件
$ vim /usr/local/zabbix/etc/zabbix_agentd.conf ... Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf ...注意:若 systemctl Zabbix-Agent.service 单元文件中已经加载此配置文件/路径,此步骤可以忽略。
3.创建监控 MariaDB(MySQL) 用户信息
MariaDB [(none)]> GRANT SELECT ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'Renwolecom'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> exit Bye注意:MySQL用户权限可根据需求设置,可参考《Linux MariaDB(MySQL)数据库更改用户权限》。
4.创建 .my.cnf 文件,添加 MariaDB(MySQL) 用户信息
$ vim /usr/local/zabbix/etc/.my.cnf # Zabbix Agent [mysql] host=localhost user=zabbix password="Renwolecom" socket=/tmp/mysql.sock [mysqladmin] host=localhost user=zabbix password="Renwolecom" socket=/tmp/mysql.sock
5.修改 userparameter_mysql.conf
修改后的内容如下:
$ cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/ $ egrep -v "(^#|^$)" userparameter_mysql.conf UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysql -N | awk '{print $$2}' UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc mysql -N' UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysqladmin ping | grep -c alive UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V UserParameter=mysql.vars[*],echo "show variables where Variable_name='$1';" | HOME=/usr/local/zabbix/etc/ /usr/local/mysql/bin/mysql -N | awk '{print $$2}'注:以上内容请注意相关绝对路径。
6.重启 Zabbix-Agent 服务
$ systemctl restart zabbix-agent
最后在 Zabbix UI界面中添加MySQL监控模板即可。
Centos 7 Zabbix Agent 客户端源码编译安装配置
Zabbix Agent 安装在远程系统上,需要通过Zabbix服务器进行监控。Zabbix Agent在客户端系统上收集资源利用和应用程序数据,并向Zabbix服务器提供这些信息。Zabbix支持Ping,ZBX、SNMP、JMX、IPMI等监控方式。
1.安装扩展包以及依赖包
$ yum -y install epel-release $ yum install pcre pcre-devel openssl openssl-devel -y
2.添加Zabbix用户和组
$ groupadd zabbix $ useradd zabbix -g zabbix -s /sbin/nologin
3.安装Zabbix-Agent
下载地址://www.zabbix.com/download
$ cd /tmp $ tar -zxvf zabbix-3.4.2.tar.gz $ cd zabbix-3.4.2 $ ./configure --prefix=/usr/local/zabbix --enable-agent --with-mysql --with-openssl $ make && make install
4.创建Zabbix日志目录并生成(PSK)密钥
$ mkdir -p /usr/local/zabbix/logs/ $ chown -R zabbix.zabbix /usr/local/zabbix $ sh -c "openssl rand -hex 32 > /usr/local/zabbix/etc/zabbix_agentd.psk" $ cat /usr/local/zabbix/etc/zabbix_agentd.psk fd1ac849e5f787dfc04300ae997d158e6f6f0c2209d66e7d2e687da2032ecbae
5.配置zabbix_agentd.conf
以下是配置完成后的内容:
$ egrep -v "(^#|^$)" /usr/local/zabbix/etc/zabbix_agentd.conf EnableRemoteCommands=1 #来至zabbix服务器的远程命令是否允许被执行 PidFile=/usr/local/zabbix/zabbix_agentd.pid LogFile=/usr/local/zabbix/logs/zabbix_agentd.log Server=10.10.204.65 #Zabbix Server IP 地址 ServerActive=10.10.204.65 #地址同上 主动向 Zabbix Server 发送监控内容 Hostname=101020465 #本机主机名 内容要和Zabbix Server 配置的 Host Name 一致 HostMetadataItem=system.uname #用于Item获取数据 User=zabbix UnsafeUserParameters=1 #是否启用自定义key,zabbix监控mysql、tomcat等数据时需要自定义key #下面使用预共享密钥(PSK)来保护服务器和客户端之间的连接 TLSConnect=psk TLSAccept=psk TLSPSKIdentity=PSK 001 TLSPSKFile=/usr/local/zabbix/etc/zabbix_agentd.psk注意:关于更多Agent配置参数优化,请参阅这里Zabbix agent (UNIX)。
6.创建systemctl系统Zabbix agent 单元文件
$ vim /usr/lib/systemd/system/zabbix-agent.service [Unit] Description=Zabbix Agent After=syslog.target After=network.target [Service] Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_agentd.conf" #EnvironmentFile=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ Type=forking Restart=on-failure #PIDFile=/tmp/zabbix_agentd.pid KillMode=control-group ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s [Install] WantedBy=multi-user.target
7.启动 Zabbix Agentd 客户端服务并加入开机自启动
$ systemctl start zabbix-agent $ systemctl enable zabbix-agent
8.设置 Firewalld 防火墙
$ firewall-cmd --permanent --add-port=10050/tcp $ firewall-cmd --reload
已经完成 Zabbix Agent 的安装。后期我还会写一些关于zabbix的使用以及优化。