「Elasticsearch」- 索引

索引,是具有某些类似特征的文档集合。 例如,可以拥有客户数据索引、产品目录索引、订单数据索引。 索引由名称进行标识(必须全部小写),此名称用于引用索引,以在对其中的文档执行索引、搜索、更新、删除操作。
在单个群集中,可以根据需要定义任意数量的索引。
默认情况下,在Elasticsearch中的每一个索引都分配了5个索引分片和1个索引副本,这意味着:如果群集中至少有两个节点,则一个索引将包含5个主索引分片和另外5个副本分片(一个完整的索引副本),总计为每个索引有10个索引分片。
「分片」与「副本」
关于分片(Shard)
一个索引可以存储很多的数据,但是过多的数据会超过硬件的限制。比如,对于有1TB数据的索引,如果存储在单个节点的硬盘上,可能会空间不足,或者搜索速度很慢。
为了解决这个问题,ES提供了将一个索引分割成多个“片”的能力,这个“片”被称为「分片」。当定义「索引」时,你可以指定「分片」的数量。每个「分片」本身都是一个功能完整且独立的「索引」,它拥有「整个索引」的一部分数据,可以托管在集群中的任何节点上。
从另一个角度看,「索引」是一个逻辑上的概念,实际在存储时被分成多个「分片」。
对索引分片有两个重要的原因:

更方便的水平扩容
可以夸分片进行并行/分布操作,因此增加性能/吞吐

「分片」的分布和搜索结果的聚合完全由ES管理,对用户来说是透明的。
关于副本(Replica)
在网路环境中,随时都可能发生故障。强烈建议有一个故障迁移机制,在「分片」或「节点」离线/消失时发挥作用。
在ES中,允许你创建“索引的分片”的“复制”,这些“复制”称为「副本」。
副本的存在有两个重要的原因:

在分片/节点失败时,提供高可用性。鉴于此,”副本分片“绝对不会和”它所拷贝的主分片“在同一个节点上
扩展搜索量/吞吐量,因为可以在所有「副本」上并行地执行搜索

总而言之,每个「索引」可以拆分为多个「分片」。 「索引」也可以被复制零次或更多次。复制后,每个「索引」都将具有「主分片」(从中复制的原始分片)和「副本分片」(主分片的副本)。
在索引创建是,可以基于索引定义「分片」和「副本」数。创建后,可以随意修改「副本」数量。可以使用「_shrink」和「_split」接口更改现有「索引」的「分片」数量,但这不是一个简单的任务,最好是能够预先计划正确数量的「分片」数量。
默认情况下,会为每个「索引」分配5个「主分片」和1个「副本」,如果你有两个节点,那你的「索引」将会有五个「主分片」,五个「副本分片」(一个完整的副本),也就是说每个「索引」有十个分片。
参考文献
Elasticsear[……]

READ MORE

「Elasticsearch」- 安装(CentOS)

Elasticsearch 7.6.2 on CentOS 7.4
Elasticsearch Reference [7.6] » Install Elasticsearch with RPM Elasticsearch Reference [7.6] » Set up Elasticsearch » Bootstrap Checks
第一步、安装 Elasticsearch、Kibana 服务

#!/bin/sh

rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
EOF

yum install –enablerepo=elasticsearch elasticsearch
yum install –enablerepo=elasticsearch kibana

第二步、修改 Elasticserach、Kibana 配置
Elasticsearch:

network.host: 0.0.0.0
discovery.type: single-node

Kibana:

elasticsearch.hosts: [“http://localhost:9200”]

第三步、添加 Nginx 反向代理

server {
server_name es-foo.example.com;
location / {
proxy_pass http://127.0.0.1:5601;
}
}

补充说明(对于 7.6.2 版本)
通过非回环地址:如果无法与其他主机组成集群,则视为开发模式;如果能够与其他主机组成集群,则视为生产模式;
Elasticsearch 6.8.6 on CentOS 7.4
Install Elasticsearch with RPM Set up Elasticsearch/Java (JVM) Ver[……]

READ MORE

「Elasticsearch」- 安装(Debian 8.2 and Elasticsearch 6.5.0)

环境概述
操作系统:Debian 8.2 软件版本:Elasticsearch 6.5.0
安装依赖
由于Elasticsearch依赖于Java环境,但是从源中安装Elasticsearch时并不会自动安装JDK包,因此需要进行手动安装。并且不同版本的Elasticsearch依赖的JDK版本不同:

Elasticsearch 6.5.0: Java 8(1.8.0_131 or a later version in the Java 8 release series)

否则APT(DPKG)安装会失败。下载地址:https://jdk.java.net
安装服务

#!/bin/sh

wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add –
apt-get install apt-transport-https
echo “deb https://artifacts.elastic.co/packages/6.x/apt stable main” | tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update

apt-get install elasticsearch=6.5.0

配置服务
修改/etc/elasticsearch/elasticsearch.yml文件的内容如下:

cluster.name: elk # 集群名称
node.name: master # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: true # 表示这是数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
# discovery.zen.ping.unicast.hosts: [“192.168.77.128”, “192.168.77.130”, “192.168.77.134”] # 配置自动发现

由于没有配置集群,所以这个节点既是master节点,也是data节点。
启动服务
执行systemctl start elasticsearch.service来启动Elasticsearch服务。
验证访问
执行curl http://localhost:9200来查看服务是否正常。如果产生类似如下的输入,则表示正常:

{
“name” : “master”,
“clust[……]

READ MORE

「Elasticsearch」- “Hot-Warm” Architecture

内容简介
当使用Elasticsearch做为“大时间”的数据分析的时候,建议使用时间作为索引,并设置三种不同类型的节点(主、热、温),也就是我们说的「Hot-Warm」架构。
本文介绍了「Hot-Warm」架构的一些基本概念、要注意的一些问题、如何搭建集群。
节点类型
每个节点都有他们自己的作用,下面将会进行介绍每个节点的作用。
# 主节点(Master Nodes)
作用:专用的Master节点负责处理集群的管理和状态,以提供集群的稳定性。
配置:在集群中,设置三个专用的Master节点,以提供最大的弹性。在专用的Master节点中,不会保存参与搜索的数据,也不会进行文档索引。因此也不会有很长时间的GC停顿,而且对CPU、RAM、DISK等资源的要求也低于其他数据节点。
要配置discovery.zen.minimum_master_nodes=2选项以防止集群脑裂。
# 热节点(Hot Nodes)
作用:专用的数据节点,复制执行群集中的所有数据的索引。它们也拥有最新的索引,并且这些索引通常是查询频率最高的。
配置:由于索引是CPU和IO密集型操作,因此这些服务器需要较高的配置,并且需要连接SSD存储。建议至少运行三个热节点,以实现高可用性。根据数据量的要求,可能需要增加数量来实现某些性能目标。
# 温节点(Warm Nodes)
作用:这种类型的节点旨在处理大量不经常查询的只读索引。由于这些索引是只读的,因此节点倾向于使用大容量磁盘,机械盘即可。
配置:与热节点一样,建议至少使用3个温节点以实现高可用性。需要注意的是,和以前一样,如果数据量较大可能需要额外的节点来满足性能要求。另外CPU和内存配置通常需要与热节点的配置相同。具体的配置只能通过模拟在生产环境中吞吐的来确定。
搭建概述
# 节点区分
首先,要有办法区分三种类型的节点,以告诉Elasticsearch在那个节点上分配索引。这可以通过为节点设置属性:

# in elasticsearch.yml
node.attr.box_type: hot

# in elasticsearch.yml
node.attr.box_type: warm

其中的box_type是自定义的属性,完全可以使用自己喜欢的名字。
因此,如果希望某个索引分配到热节点,可以在创建索引时指定标签:

PUT /logs_2016-12-26
{
“settings”: {
“index.routing.allocation.require.box_type”: “hot”
}
}

# 索引配置
如果使用logstash或beats管[……]

READ MORE

「Elasticsearch」- 设置 GC 日志

Elasticsearch Reference [6.3]
Set up Elasticsearch » Important Elasticsearch configuration » GC logging
默认开启,已配置轮转,每个文件最大 64M,总共消耗 2GB 磁盘空间。
参考文献
Elasticsearch Reference [6.3] » Set up Elasticsearch » Important Elasticsearch configuration » GC logging[……]

READ MORE

「Elasticsearch」- 管理与维护

查看当前集群配置
方法一、检查集群配置文件
通过配置文件查看配置信息:/etc/elasticsearch/
潜在问题:某些配置是通过 REST API 修改的,无法在配置文件中体现。
方法二、使用 REST API 查看

# 返回集群全部设置
GET /_cluster/settings?include_defaults=true

修改集群配置
方法一、通过配置文件修改
1)修改 /etc/elasticsearch/ 配置文件 2)重启服务,以使配置生效
方法二、通过 REST API 修改
通过 REST API 修改(持久修改):

# PUT /_cluster/settings
curl -X PUT \
-H “Content-Type: application/json” \
-d ‘{“persistent” : {“indices.recovery.max_bytes_per_sec” : “40mb”}}’ \
http://127.0.0.1:9200/_cluster/settings

通过 REST API 修改(临时修改):

# PUT /_cluster/settings
curl -X PUT \
-H “Content-Type: application/json” \
-d ‘{“transient” : {“indices.recovery.max_bytes_per_sec” : “40mb”}}’ \
http://127.0.0.1:9200/_cluster/settings

注意事项: 1)某些属性无法通过 API 修改,在修改这些属性时会返回:not dynamically updateable 2)如果属性不存在,将返回:not recognized
常用操作汇总
# 重命名索引

# https://stackoverflow.com/questions/28626803/how-to-rename-an-index-in-a-cluster
POST /_reindex
{
“source”: {
“index”: “twitter”
},
“dest”: {
“index”: “new_twitter”
}
}

参考文献
How do I POST JSON data with cURL? Elasticsearch Reference [7.7] » REST APIs » Cluster APIs » Cluster update settings API[……]

READ MORE

「Elasticsearch」- 分析器

参考文献
Elasticsearch Reference [6.5] » Analysis

章节列表
「Elasticsearch」- 中文拼音分析器 「Elasticsearch」- 安装中文分析器 「Elasticsearch」- 分词过滤器[……]

READ MORE

「Elasticsearch」- 中文拼音分析器

拼音分析器:GitHub/medcl/elasticsearch-analysis-pinyin
在搜索关键字中可以包含拼音。
Elasticsearch 7.6.2
第一步、下载插件(可选)

https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.6.2/elasticsearch-analysis-pinyin-7.6.2.zip

第二步、安装插件
在 CentOS 7.4 中,如果使用 YUM 安装 Elasticsearch 服务,则:

#!/bin/sh

cd /usr/share/elasticsearch

# 直接在线安装
./bin/elasticsearch-plugin install \
“https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.6.2/elasticsearch-analysis-pinyin-7.6.2.zip”

# 或者使用离线(第一步下载的安装包)
./bin/elasticsearch-plugin install “file:///path/to/elasticsearch-analysis-pinyin-7.6.2.zip”

第三步、重启服务

systemctl restart elasticsearch.service

第四步、验证服务

# curl http://10.10.50.233:9200/_cat/plugins
elasticsearch-deve analysis-pinyin 7.6.2

Elasticsearch 6.3.2
# 方法一:直接使用预编译的插件

#!/bin/sh

################################################################################
# 安装
################################################################################
# CentOS 7.4,如果你使用YUM源来安装Elasticsearch服务
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install \
“https://github.com/medcl/elasticsearch-analysis-pinyin/release[……]

READ MORE

「Elasticsearch」- 使用 Curator 管理索引(学习笔记)

问题描述
在日志收集集群中,集群会按照时间创建索引。我们希望保留在某段时间内的日志,比如保留在 30 天内的日志,超过 30 天的日志将被自动删除。
本文将记录管理索引的方法,并实现自动删除索引,而无需人为干预。
解决方法
Index Lifecycle Management
官方提供 Index Lifecycle Management 特性,但是属于 X-PACK 的非免费功能,因此这条路不通。
本笔记不记录与 Index Lifecycle Management 特性有关的内容
Curator
还有其他的方案 – 可以使用 Curator 整理 Elasticsearch 索引,但是需要考虑一下几个问题: 1)项目是否还在维护 => # 06/02/2020 Latest commit b131026 on Mar 17 2)是否支持我们的集群版本 => 根据 Version Compatibility 文档,Version 5 支持 ES 7.X 版本
官方文档:Curator Index Management 5.8 项目地址:GitHub/elastic/curator
本笔记将重点记录 Curator 工具的使用方法,以及相关参考文档的位置。
安装 Curator 工具
CentOS 7 and Curator 5
Curator Reference [5.8] » Installation » YUM repository

rpm –import https://packages.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/curator-5.repo <<EOF
[curator-5]
name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF
yum makecache

yum install elasticsearch-curator
# 安装到 /opt/elasticsearch-curator 目录
# 并自动创建 /usr/bin/curator 软链接

Debian 10 and Curator 5
Curator Reference [5.8] » Installa[……]

READ MORE

「Curator」- 删除五天前日志索引

问题描述
日志集群:Elasticsearch 7.6.3 我们需要自动删除在日志集群中五天前的日志。
我们的日志以天为单位存储在不同的索引中,的以天日志索引格式为 logstash-YYYY.MM.DD
解决方法
使用 Curator 工具
第一步、创建配置文件
该配置文件用于指定集群的连接信息,config.yaml:


client:
hosts:
– 10.10.50.229
– 10.10.50.230
– 10.10.50.231
port: 9200
url_prefix:
http_auth:
timeout: 300
master_only: False

logging:
loglevel: INFO
logfile:
logformat: default
blacklist: [‘elasticsearch’, ‘urllib3’]

第二步、创建动作文件
该配置文件用于指定要执行的动作,action.yaml


actions:
1:
description: “删除五天前的索引”
action: delete_indices
options:
ignore_empty_list: True
timeout_override: 300
continue_if_exception: False
disable_action: False
filters:
– filtertype: pattern
kind: timestring
value: ‘logstash-%Y.%m.%d’
– filtertype: age
source: name
direction: older
timestring: ‘%Y.%m.%d’
unit: days
unit_count: 5

第三步、测试
使用 –dry-run 测试,根据日志输出进行调整:

curator –config /path/to/config.yaml –dry-run action.yaml

然后去掉 –dry-run 选项执行,并检查索引是否被删除:

curator –config /path/to/config.yaml action.yaml

第四步、添加定时任务
附加说明
时间选择的问题
时间选择是个复杂的问题,该方案不适用与删除 30[……]

READ MORE

「Elasticsearch」- 查询语法(学习笔记)

参考文献
Query DSL | Elasticsearch Guide [7.12] | Elastic[……]

READ MORE

「Elasticsearch」- 常见错误列表

#4 Data too large
I got issue about “Data too large”
问题描述: 在 Kibana 中,返回如下错误信息:

[circuit_breaking_exception] [parent] Data too large, data for [<http_request>]
would be [1004465832/957.9mb], which is larger than the limit of [986061209/940.
3mb], real usage: [1004465832/957.9mb], new bytes reserved: [0/0b], with { bytes
_wanted=1004465832 & bytes_limit=986061209 & durability=”TRANSIENT” }

解决办法: 修改 JVM Heap 大小,参考 Setting JVM options 笔记。
#3 java.lang.OutOfMemoryError: Java heap space
-「Setting the heap size」 -「Elasticsearch service failing」
问题描述: 服务挂了,看日志,而java.lang.OutOfMemoryError: Java heap space是最后一条日志。
问题原因: 内部太少了。
解决方案: 系统为CentOS 7.5,Elasticsearch 6.3.2,修改/etc/sysconfig/elasticsearch文件中的ES_JAVA_OPTS=”-Xms6000m -Xmx6000m”,然后重启服务。
#2 cluster_block_exception blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]
-「Elasticsearch error: cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)], flood stage disk watermark exceeded」
问题描述: 执行操作时,产生如下错误:

{
“error”: {
“root_cause”: [
{
“type”: “cluster_block_exception”,
“reason”: “blocked by: [FORBIDDEN/12/index read-only / all[……]

READ MORE

「Elasticsearch」- 集群/索引 Red/Yellow 状态

问题描述
我们修改 JVM Heap 参数后,当重启集群后,集群呈现 Red 状态,部分索引也呈现 Red 状态。
使用 GET /_cluster/allocation/explain?pretty 接口,查看状态,得到如下信息:

reached the limit of incoming shard recoveries [2], cluster setting [cluster.rou
ting.allocation.node_concurrent_incoming_recoveries=2] (can also be set via [clu
ster.routing.allocation.node_concurrent_recoveries])

随着时间的推进,索引从 RED => YELLOW => GREEN 过渡。另外,我们使用 Elasticsearch 7.6 版本。
附加说明: 1)本笔记将介绍排查 Red Cluster 的通用方法,而不是针对特定成因(因为成因有很多,但是排查思路是类似的)。
背景知识
当我们运行单实例时……
当我们运行单实例时,所有 Primary Shards 在同个节点,没有 Replica Shards 存在,节点呈现 Yellow 状态。
此时集群功能正常,但是数据可能丢失。
当我们加入节点后……
当我们向集群加入新的节点后,集群立刻开始 Replica Shareds 分配。
当分配结束后,集群进入 Green 状态。最终,所有 Primary Shard 被分散在不同的节点上。
当集群 Red 状态时……
隐含信息
表示至少某个 Primary Shard 及它的 Replica Shard 没有分配到节点。
简单说,Primary Shard 与 Replica Shard 的分配都存在问题。
可能原因
1)集群节点故障,及负载过高导致进程退出。 解释:所有 Primary Shard 被分散在不同的节点上,当某个节点故障时,分配在其上的 Primary Shard 丢失,那么此时集群的 Primary Shard 就存在问题,集群功能异常,无法使用,呈现红色。
排查思路
Red Index 导致 Red Shard 状态,Red Shard 导致 Red Cluster 状态。
使用 GET /_cluster/allocation/explain 获取首个无法分配的 Shard 并解释原因:

{
“index”: “test4”,
“shard”: 0,
“primary”: true,
“c[……]

READ MORE

「Kibana」- 常见问题处理

# 如果你的Kibana显示中文,那很可能是用了「anbai-inc/Kibana_Hanization」这个。[……]

READ MORE

「Zabbix」- 基本概念

内容简介
在Zabbix中的一些基本概念和术语,比如Server、Agent、Proxy、Sender、Get、Trigger、Item、Event等等。
理解这些术语,有助于进一步的了解Zabbix的组成及Zabbix是如何工作的。
host
想要监控的有IP/DNS的联网设备。
host group
逻辑上的一组主机;可以包含主机,也可以包含模板。host group内的主机和模板不以任何方式相互链接。当为不同用户组的主机分配访问权限时,将使用主机组。
item
要从主机接收的特定数据片段。 在设置了host之后,还要添加一些监控项(item)才能开始获取实际的数据。如果想一次添加更多的item到主机上,可以将template绑定到主机上。 在单个item中,可以指定要从主机获取什么数据,使用item key来实现。
trigger
trigger是一个表达式,定义了相关的阈值来”评估”item中收到的数据,如果超过“可接受的”阈值,就会触发trigger。 item虽然可以搜集数据,但是当某些数据值得关注或警告的时候,item并不会进行评估处理,而这个任务是由trigger完成的。 当接收到的数据高于阈值时,trigger从“Ok”进入“Problem”状态。当接收到的数据低于阈值时,trigger保持/返回到“Ok”状态。
event
发生的一些值得注意的事情。在Zabbix中,生成以下几种event:

trigger events – trigger的状态是否发生改变 (OK→PROBLEM→OK)。
discovery events – 检测到主机和服务。
auto registration events – 主动代理由服务器自动注册
internal events – 当item/low-level discovery规则变成不支持,或者trigger进入为止状态。
a trigger goes into an unknown state

problem
problem指的是处于“Problem”状态的trigger
action
如果希望由于event而发生某些操作(例如发送通知),则需要配置操作。对event做出反应的预定义的方法。 action由操作(例如发送通知)和条件(执行操作时)组成。可以根据所有支持的类型的event来定义操作:

Trigger events – 当trigger状态从OK改变为PROBLEM,或者反向改变时。
Discovery events – 发生网络发现时。
Auto registration events – 当新的主动[……]

READ MORE

「Zabbix」- 主动模式(Active checks)与被动模式(Passive checks)

主动模式(Active checks)与被动模式(Passive checks)
(1)“主动模式(Active checks)”与“被动模式(Passive checks)”是相对于 AGENT 来说的,即“由 zabbix agent 主动检查”或“有 zabbix agent 被要求检查”。(2)监控项目是主动检查还是被动检查则在 zabbix server 中定义,在 zabbix agent 中并没有定义监控项。
被动模式
首先由 zabbix server 发起请求,根据 zabbix server 请求,再由 zabbix agent 在主机中获取目标数据。
在 zabbix server 中的 poller 进程连接 zabbix agent 服务,并等待数据返回,然后关闭连接。
主动模式
首先由 zabbix agent 从 zabbix server 获取检索项目,然后 zabbix agent 周期性向 zabbix server 发送数据。
在 zabbix agent 中,默认间隔两分钟连接 zabbix server 的 trapper 端口,以获取检测指标。zabbix agent 根据检测指标获取数据并处理,处理之后将数据发送给 zabbix server。
应该使用主动模式还是被动模式?
只能使用被动模式的场景
在特殊场景中,比如 Zabbix 部署于内网,而被监控主机位于外网,此时只能使用被动模式(也有其他“繁琐的”解决办法)。或者网络访问有特殊要求(不能进只能出),也只能使用主动模式。
远程命令(Remote Command)特性只能在被动模式下使用。在主动模式下,zabbix agent 只负责收集数据,不受 zabbix server 管控,也不知道何种状态属于故障,因此无法执行远程命令。
两者性能对比
在被动模式中,zabbix server poller 连接 zabbix agent,在数据返回后再关闭连接。可以在配置文件中指定超时时间,以及使用 time zabbix_get 命令测试命令执行时间。
在被动模式中,(1)如果 UserParameter 执行时间较长,则 zabbix server poller 将无法处理其他监控项,需要在配置文件中增加 poller 的数量。(2)同样如果 zabbix agent 处理某个 UserParameter 时间过长,将无法处理其他监控项,需要在配置文件中增加 zabbix agent 进程数量。(3)执行时间过长将导致性能下降,但是有时又没有其他办法。
在主动模式中,就不会具有上述缺点,因为数据有 zabbix agent 处理并发送,无需 zabbix serv[……]

READ MORE

「Zabbix」- 安装与升级

内容简介
本部分内容与 Zabbix 安装有关;
安装过程概述
第一步、安装 Nginx 服务
安装 Nginx 服务,用作前端访问。安装发行版自带版本即可;
第二步、安装 PHP 环境
安装 PHP 环境,负责提供 Zabbix Web UI 运行环境;
第三步、安装 MySQL 数据库
作为 Zabbix 后端存储;
第四步、安装 Zabbix 监控
不知何时起,官方改版「Download and install Zabbix」页面,在选择平台后会自动显示安装命令,非常方便;
相关程序(命令)
Zabbix Manual Pages
在 Zabbix 中,安装的程序及各自作用如下:
zabbix_server,服务端的核心程序; Zabbix 的核心守护进程; 用于从设备收集监控数据,然后发送到 Zabbix Server
zabbix_proxy,代理服务程序,用于分布式监控的 Proxy 模式中;
zabbix_agentd,代理程序,运行于监控节点,负责收集监控数据;
zabbix_agent,与 zabbix_agentd 的类似,但是 zabbix_agent 需要以 xinetd 方式来启动; Zabbix Agent 守护进程; 用于监视各种服务器参数。默认监听的端口为 10050;
zabbix_java_gateway,使用 JMX 方式,采集 Java 程序信息;
zabbix_get,命令行工具,用于从 Agent 中获取数据; 用于从 Zabbix agent 获取数据;
zabbix_sender, 用于向 zabbix_server 或 zabbix_proxy 发送数据。 在 Zabbix 服务器上,应使用相应的「key」创建类型为「Zabbix trapper」的「item」。 请注意,要想接受传入值,只有从此「item」的“Allowed hosts”字段中指定主机;
参考文献
访问 Zabbix 主页 访问 Zabbix 文档 Zabbix manpages[……]

READ MORE

「Zabbix」- 安装(CentOS)

本笔记整理在 CentOS 中部署 Zabbix 的过程,大致步骤如下: 1)安装 Nginx 服务; 2)安装 PHP-FPM 环境; 3)安装 MySQL/MariaDB 数据库; 4)安装 Zabbix Server、Agent、Frontend 服务; 5)配置 MySQL 用户,导入数据库表结构,并启动数据库服务; 6)配置 Zabbix Server 数据库连接,并启动服务以验证配置正确; 7)配置 PHP 环境参数,并启动 PHP-FPM 服务; 8)配置 Nginx 服务,绑定域名,指定目录,并启动服务; 9)配置 Frontend 以连接数据库,访问网页以查看;
CentOS 7.0 and Zabbix 4.0.1
Zabbix Documentation 4.0/1 Red Hat Enterprise Linux/CentOS

# 添加仓库,并安装 Server、Agent、Frontend(使用 MySQL 数据库)
rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum install -y zabbix-agent-4.0.1 zabbix-server-mysql-4.0.1 zabbix-web-mysql-4.0.1 \
zabbix-get-4.0.1

# c. Create initial database
# Import initial schema and data. You will be prompted to enter your newly created password.
yum groups install ‘MariaDB Database Client’ ‘MariaDB Database Server’
mysql_secure_installation

mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘password’;
mysql> quit;

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

# d. Configure the database for Zabbix server
# Edit fil[……]

READ MORE

「Zabbix」- Debain 8.2 and Zabbix 4.0

系统环境

操作系统:
Debian 8.2

软件版本:
Zabbix 4.0

a.Install Repository with MySQL database

wget https://repo.zabbix.com/zabbix/4.0/debian/pool/main/z/zabbix-release/zabbix-release_4.0-2+jessie_all.deb
dpkg -i zabbix-release_4.0-2+jessie_all.deb
apt update

b.Install Zabbix server, frontend, agent

apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent

c.Create initial database

mysql -uroot -p
# password:
# mysql> create database zabbix character set utf8 collate utf8_bin;
# mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘password’;
# mysql> quit;

Import initial schema and data. You will be prompted to enter your newly created password.

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

d.Configure the database for Zabbix server
Edit file /etc/zabbix/zabbix_server.conf

DBPassword=password

e.Configure PHP for Zabbix frontend
Edit file /etc/zabbix/apache.conf, uncomment and set the right timezone for you.

php_value date.timezone Europe/Riga

f.Start Zabbix[……]

READ MORE

「Zabbix」- Raspbian and Zabbix 4.0

内容简介
本文将介绍在Raspbian中部署Zabbix 4.0版本。
系统要求
# Requirements

MariaDB Installation

# Repository

Adding Zabbix repository

# Server

Server/proxy/frontend installation

Creating database

# Frontend

Server/proxy/frontend installation

# Agent

Agent installation

详细内容参考官方手册。Zabbix Documentation 4.0/2 Debian/Ubuntu/Raspbian
# Error mysql Specified key was too long; max key length is 767 bytes https://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html#innodb-maximums-minimums https://blog.csdn.net/bigdataf/article/details/78921409 https://stackoverflow.com/questions/16568128/max-size-of-unique-index-in-mysql[……]

READ MORE

「Zabbix」- 关于版本升级

内容简介
本文整理了与Zabbix版本升级有关的内容,但是并不涉及升级的具体过程,只是对升级过程的一个概述,及需要注意的问题。
升级过程
在官方文档中,列举出了基本的升级过程,下面是一个简单的整理:

##1 停止Zabbix服务。

##2 备份数据。这是至关重要的一步,因为升级过程中,启动Zabbix Server后,它会去检查数据库的版本,并进行自动数据库表升级。如果这个过程出现问题,那数据就毁了,所以一定要做好数据的备份。

##3 备份配置文件。这可能包括:在/etc/zabbix中的配置文件;前端Web程序;前端Web程序的HTTP站点配置。具体内容视情况而定。

##4 配置源。配置新的源,进行升级。(如果能够使用源安装,尽量不要使用源码编译安装。)

##5 安装新版本的包。

##6 启动服务。在启动服务之前,最好先执行tail -f /var/log/zabbix/zabbix_server.log命令,因为zabbix_server会检查数据库的版本,并进行一系列的数据库升级动作,要留意升级过程中是否出现了错误(这也是进行数据库备份的原因,挺刺激的)。

##7 收尾工作。最后的工作就是检查Web前端,以及有没有其他的错误。这些都是小事情了。

流程就是这个样子的,详细的细节在官方文档上有所描述。
# 08/22/2019 # Zabbix 3.02 to Zabbix 4.25
这个是已经测试过的,将3.02升级到4.25版本,成功了。暂时没有遇到问题。
升级过程参考官方「Upgrade from packages/1 Red Hat Enterprise Linux/CentOS」文档,这是升级到4.2版本的文档。
升级过程中,我的系统是CentOS 6.9发行版,没有systemd服务。所以,我直接参考「Download and install Zabbix」手册,进行了安装,这与升级并不冲突。
注意事项
要详细阅读“新版Zabbix”(要升级到的版本)对资源的要求。
要详细阅读每个升级手册的「upgrade notes!」部分,该部分描述了升级过程中会发生的问题,需要的时间,变更的内容等等。[……]

READ MORE

「Zabbix」- 在 Windows 中安装 zabbix agent 服务

第一步、下载安装包
https://www.zabbix.com/download_agents
第二步、执行安装
参考官方 Zabbix Documentation 4.4/4 Windows agent installation from MSI 文档,执行 下一步 => 下一步 => 下一步 安装。
修改配置与重启
配置文件为 C:\Program Files\Zabbix Agent\zabbix_agentd.conf 文件,即默认安装目录。
服务重启(好像没有 restart 命令):

net stop ‘Zabbix Agent’
net start ‘Zabbix Agent’

参考文献
Zabbix Documentation 4.4/4 Windows agent installation from MSI Essential Tools for Windows Services: The NET Command[……]

READ MORE

「Zabbix 3.2」- 使用源码安装

内容简介
本文将介绍如何使用源码安装Zabbix监控(只包含Zabbix Server和Zabbix Agent服务的安装)。
注意事项
本文只安装Zabbix Server和Zabbix Agent服务,没有安装Zabbix Proxy服务。
创建普通用户及组
Zabbix出于安全考虑,不允许使用root运行。如果使用root运行,会自动切换到zabbix用户,如果zabbix用户不存在就会报错。下面是创建用户、组的命令:

#!/bin/sh

groupadd zabbix
useradd -g zabbix zabbix

而且,如果Zabbix Agent和Zabbix Server运行于同一台服务器,最好是使用不同的用户。防止Agent访问Server的配置文件。
创建Zabbix Server使用的数据库
因为Zabbix Server要保存数据,所以要在Zabbix Server所在的服务器上创建数据库。SQL文件位于源码目录下的database中,具体使用那种数据库,根据需要而定。这里以MySQL为例:
第一步,登录MySQL创建用户并授权:

#!/bin/sh
mysql -uroot -p

create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by ‘<password>’;
quit;

第二步,导入相关的数据库:

#!/bin/sh

mysql -uzabbix -p zabbix < schema.sql

# Zabbix Proxy不需要下面这两个SQL文件。
mysql -uzabbix -p zabbix < images.sql
mysql -uzabbix -p zabbix < data.sql

关于其他的数据库,参考「1 Database creation scripts」手册。
安装Zabbix Server和Zabbix Agent
第一种情况,如果Server和Agent在同一台主机上:

#!/bin/sh

# 如果MySQL不再标准路径,需要使用–with-mysql=/<path_to_the_file>/mysql_config来指定
./configure –enable-server \
–enable-agent –with-mysql \
–enable-ipv6 –wit[……]

READ MORE

「zabbix_get」-

从Zabbix Agent获取数据
命令语法格式
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] –tls-connect cert –tls-ca-file CA-file [–tls-crl-file CRL-file] [–tls-agent-cert-issuer cert-issuer] [–tls-agent-cert-subject cert-subject] –tls-cert-file cert-file –tls-key-file key-file -k item-key
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] –tls-connect psk –tls-psk-identity PSK-identity –tls-psk-file PSK-file -k item-key
命令描述
命令zabbix_get是一个命令行程序,用户从用户Zabbix Agent获取数据。
命令支持的选项及含义
-s, –host host-name-or-IP 指定主机的IP地址
-p, –port port-number 指定Zabbix Agent所在的端口号。默认为10050
-I, –source-address IP-address 指定源IP地址。
-k, –key item-key 指定要取值的ITEM的key
设置TLS信息
–tls-connect value 如何连接到Agent,参数value的取值可能为:

unencrypted,不加密的连接,默认。
psk,使用TLS和预共享密钥连接。
cert,使用TLS和证书连接。

–tls-ca-file CA-file 包含用于对等证书验证的顶级CA证书的文件的完整路径名。
–tls-crl-file CRL-file 包含已吊销证书的文件的完整路径名。
–tls-agent-cert-issuer cert-issuer 允许的代理证书发行者。
–tls-agent-cert-subject cert-subject 允许的代理证书主题。
–tls-cert-file cert-file 包含证书或证书链的文件的完整路径名。
–tls-key-file key-f[……]

READ MORE

「Zabbix」- 管理与配置

内容简介
本部分整理与 Zabbix 日常维护与管理相关的内容。
配置流程
Host groups => Hosts => Applications => Items => Trigger => Actions
User Groups => Users => Medias => Audit
版本号在页面的最下方
在手动确认问题后,关闭闪烁
Problems Widget – Can you Disable Flashing of recent problems?
Administration -> General -> Trigger displaying options -> blinking[……]

READ MORE

「Zabbix」- 设置主动模式与被动模式

本笔记将记录如何配置主动模式监控与被动模式监控。(1)在默认配置(Zabbix Server)中,所有监控项默认为被动模式。(2)zabbix agent 可同时运行两种类型检查。
环境概述
软件版本:Zabbix 4.2
配置主动模式(Active checks)
第一步、修改 zabbix agent 配置
(配置)修改 /etc/zabbix/zabbix_agentd.conf 文件:

# 禁用被动检查(不建议:因为在默认模板中主动与被动都有使用)
# StartAgents=0

# zabbix agent 将从该 zabbix server 拉取监控项
ServerActive=zabbix.example.com

# 当前主机名,用于表示该主机,将会在 zabbix server 配置中用到
# => 建议使用 HostnameItem 参数
# Hostname=zabbix_client

# 如果未配置 Hostname 参数,则将使用 HostnameItem 参数自动获取主机名。如果 HostnameItem
# 参数也没有配置,则会使用实际系统主机名(但可能不是期望的值)。
# 使用 zabbix_get -s127.0.0.1 -k system.hostname 查看主机名。
HostnameItem=system.hostname

(重启)其他参数保持不变,重启 zabbix agent 服务。
第二步、修改 Zabbix Server 配置
创建主动模式模板(克隆被动模板,把所有项改为 Zabbix agent(Active) 类型):

(1)Configuration => Template => Template OS Linux => Full clone => Template name: Template OS Linux Active => Add

(2)Template name: Template OS Linux Active => Linked templates => Linked templates => Unlink

(3)Template name: Template OS Linux Active => Items => Select all => Mass update => Type: Zabbix agent(Active) => Update

稍后在 Graph 中查看数据是否存在即可。
补充说明
如果多个 zabbix[……]

READ MORE

「Zabbix」- 监控项(Items)

内容简介
在很多情况下,我们需要更加复杂的监控方式、监控指标,这时候就需要自定义监控项。
本文件简单介绍了在Zabbix中有关监控项(Item)添加及监控项管理相关内容。
什么是监控项?
监控项是要获取的指标。由要获取的数据、获取频率、数据类型保存时间等等组成。检测周期影响了数据获取,可影响Zabbix Server的频率。
如何添加监控项?
监控项可以在「Host」中添加,也可以在「Template」中添加。在「Template」中添加的监控项可以复用。
# 第一步、添加监控项
这里演示在Template中添加。依次找到「Configuration – Templates – Items – Create Item」后,进入监控项的创建页面:

# Name – 监控项的名称。
# Key – 监控项的值。(1)可以自行选择,但是“自定义KEY”(后面介绍)需要手动填入。(2)然后,将[<xxx>]中的值修改为特定参数(参考「4.2/Item types」手册)。比如要统计内存总大小,在选择vm.memory.size[<mode>]之后,修改为vm.memory.size[total]既可(当然除了total还有其他的参数可选择)。

在页面中的其他输入框,如字面含义一样,详细可以参考「4.2/2 Items」文档。下面只简单列举一部分:

Name
监控项名称

Type
监控项的类型

Key
该监控项对应的KEY名

Type of information
所获取到的信息的类型

Update interval
数据的获取频率

Custom intervals
自定义频率,可以重定义Update interval的规则

关于「KEY」格式 (1)在页面中的KEY字段,它的值可以有KEY或者KEY[PARAM]两种格式,即“有参数”与“无参数”两种。 (2)其中KEY的合法命名使用正则表示为:[a-zA-z0-9-_.] (3)其中PARAM为参数,格式可以是“引号字符串”,“非引号字符串”,“数组”这三种。“引号字符串”形如:vm.memory.size[“total”];“非引号字符串”形如:vm.memory.size[total],如果有引号则要使用反斜线转义,不能使用逗号及方括号;“数组”形如:icmpin[……]

READ MORE

「Zabbix 企业级分布式监控系统」- 读书笔记

第1部分 Zabbix基础部分
第1章 监控系统简介 2
1.1 为何需要监控系统 2
1.2 监控系统的实现 2
1.3 监控系统的开源软件现状 4
1.4 监控系统的原理探究 11
第2章 Zabbix简介 14
2.1 Zabbix的客户 14
2.2 使用Zabbix的准备 15
2.3 Zabbix为何物 15
2.4 选择Zabbix的理由 16
2.5 Zabbix的架构 17
2.6 Zabbix的运行流程 18
2.7 Zabbix的功能特性 19
第3章 安装部署 21
3.1 安装环境概述 21
3.2 Zabbix_Server服务端的安装 25
3.3 Zabbix_Agent客户端的安装 39
3.4 SNMP监控方式的安装配置 40
3.5 Windows上安装Zabbix-Agent 40
3.6 其他平台的安装 43
3.7 zabbix_get的使用 43
参考Zabbix手册中的说明。
示例命令:zabbix_get -s 127.0.0.1 -p 10050 -k “system.cpu.load[all,avg1]”
3.8 Zabbix相关术语(命令) 44
3.9 Zabbix Server对数据的存储 45
3.10 Zabbix init脚本解释 55
3.11 高可用和安全 56
3.12 Zabbix数据库的备份 57
第4章 快速配置使用 59
配置完成后,访问`http://hostnameOrIpAddress/zabbix’来访问。
4.1 配置流程 59
Host groups – Hosts – Applications – Items – Triggers – Event – Action – User groups – Users – Medias – Audit
其中,Item、Trigger、Graphs通常使用模板进行配置,无需逐个配置。
其中,Item用于获取数据;Graphs用于向用户展示Item获取的数据;
配置Trigger不是必须的。它主要用于条件判断,如果在不满足条件时触发事件,则需要配置触发器。
配置Screens可以将多个Graphs集中显示。
简单的逻辑图就是:
下面介绍配置。
4.2 主机组的添加 61
添加主机组,将一组主机存放在一起,也可以存放模板。
建议:同一属性的主机或者模板,应该归类到同一个分组中。
分组原则:

以地理位置进行划分;
以业务单位进行划分;
以机器用途进行划分;
以系统版本划分;[……]

READ MORE

「Zabbix」- 使用 Ansible 批量部署 zabbix-agent 服务

问题描述
需要为内网 50.x 网络的多台 Linux 主机部署 zabbix 监控,工作内容如下:
安装 zabbix agent 服务
由于资产管理极度混乱,因此需要先辨别出 Linux 主机,排除 Windows/ESXi 主机 在安装 zabbix agent 服务时,需要辨别发行版(CentOS 6/7)
在 zabbix server 中添加主机
将主机添加到 zabbix server 中 并为主机添加监控模板
解决办法
安装 zabbix agent 服务
使用 Ansible 批量部署,避免重复执行安装任务。
在 zabbix server 中添加主机
使用 Zabbix 自动发现,避免重复执行配置工作。
注意事项
本笔记只是简述过程,用于记录操作流程,并非详细操作方法。场景不同需要具体问题需要具体分析。
环境概述
网络:10.10.50.0/25 主机:Linux / Windows / ESXi,但是我们只部署 Linux 监控 系统:CentOS 6.x / CentOS 7.x
第一步、配置自动发现(Active agent autoregistration)
参考 Active agent autoregistration 笔记进行配置
创建自动注册规则(Auto registration)
使用自动注册,需要添加规则:Event source => Auto registration
过滤自动注册主机(Conditions)
在该网络中,同时具有 Windows/Linux/ESXi 主机,我们只部署 Linux 监控,需要防止其他主机自动注册。
因此需要在 zabbix agent 中配置 HostMetadata 参数(添加 Linux 字符串),然后在 Conditions 中过滤(Host metadata contains Linux)。在此步骤中我需要们配置过滤条件,而配置 HostMetadata 参数放在下一步(配置 Zabbix Agent 服务)中完成。
添加自动注册操作(Operations)
根据需要在 Operations 中添加 Add host、Add to host groups、Link to templates 等等,以指定在出发自动注册时需要进行的动作。
第二步、部署 zabbix agent 服务
辨别 CentOS 主机,创建清单文件
使用 fping 命令找到全部存活主机(00-fping-scan.sh) => 获取内网所有 Linux 主机,以端口 22 开放为标准(01-port22-detecting.sh) =&[……]

READ MORE

「00-fping-scan.sh」

#!/bin/sh

################################################################################
# 检测 所有 主机
################################################################################
for i in $(seq 1 255)
do
ip_address=”10.10.50.${i}”
(
ping -W 2 -c 1 $ip_address &> /dev/null \
&& echo $ip_address
) &
done

wait[……]

READ MORE