在数字化转型的浪潮下,小程序游戏如何成为企业吸引年轻用户的重要工具?
1269
2022-09-28
elk集群安装配置详解
# 一:简介
```
Elasticsearch作为日志的存储和索引平台;
Kibana 用来从 Elasticsearch获取数据,进行数据可视化,定制数据报表;
Logstash 依靠强大繁多的插件作为日志加工平台;
Filebeat 用来放到各个主机中收集指定位置的日志,将收集到日志发送到 Logstash;
Log4j 直接与 Logstash 连接,将日志直接
Logstash(当然此处也可以用 Filebeat 收集 tomcat 的日志)。
```
#### port
```
Elasticsearch
9200:对外提供服务的 HTTP 端口
9300:作为交互的 TCP 端口
Logstash
5000: Logstash TCP input
5044:用于接收来着 Filebeat 收集的日志数据
4569:用于接收来着 Log4j 的日志数据
8080:用于接收来自插件 Logstash-input-的日志数据
Kibana
5601 端口用于 Kibana的界面
```
#### 安装环境介绍:
```
- 系统版本
more /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
- 系统内核
uname -a
Linux yunwei-ts-100-71 3.10.0-327.13.1.el7.x86_64 #1 SMP Thu Mar 31 16:04:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
- java 版本
java -version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)
- 如果版本过低,或者没有安装执行命令如下:
yum install java-1.8.0-*
注意: Logstash需要Java 8或更高版本.可以使用
[oracle官方版本] 或者使用开源版本OpenJDK: 二:集群安装配置
```
- 测试集群规划
主机名 IP地址
yunwei-ts-100-70 172.16.1.70
yunwei-ts-100-71 172.16.1.71
yunwei-ts-100-111 172.16.1.111
- 软件版本:
elasticsearch 2.4.1
logstash.noarch 1:2.3.4-1
filebeat-1.2.3
kibana.x86_64 0:4.5.3-1
```
### 安装部署elasticsearch集群
##### 简介
ElasticSearch原生支持Cluster模式,节点之间通过单播或多播进行通信;ElasticSearch Cluster能自动检测节点的增加、失效和恢复,并重新组织索引。
##### ELK的工作原理:
使用多播进行机器发现同一个集群内的节点,并汇总各个节点的返回组成一个集群,主节点要读取各个节点的
状态,在关键的时候进行数据的恢复,主节点会jian'shi监视各个节点的状态,并决定每个分片的位置,通过ping的request检测各失效的节点。
##### elasticsearch的基本结构认识
```
以mysql数据库为实例对应理解:
mysql 数据库databases 表tables 行rows 列columns
es 索引indices 类型types 文档documents 字段fields
```
##### elasticsearch中所说的索引容易混淆,3种含义:
```
1. 索引(名词) 如上面类比,一个索引(index)就好比是mysql中的数据库,它是存储数据的地方。
2. 索引(动词)表示把一个文档存储到索引(名词)里。
3. 倒排索引 好比mysql为特定列增加一个索引。
- 和mysql类似,每个库都得有表,还有表的结构。es的每一个索引都有个类型,而每个type(类型)得有个mapping (映射)。mapping就像是mysql中的表结构, 他将每个字段匹配为一种确定的数据类型(string,date等)。
- 你可以向已有映射中增加字段,但你不能修改它。如果一个字段在映射中已经存在,这可能意味着那个字段的数据已经被索引。
- 如果你改变了字段映射,那已经被索引的数据将错误并且不能被正确的搜索到.为了提高搜索的效率,es使用倒排索引来做全文搜索。通过analyzer(分词器)先把需要分析的文本,表征化为适合的term(词),然后标准化这些term,使他们容易被搜索到。(比如说模糊大小写,空格等等)
```
##### 集群规划
```
主机名 IP 集群服务
yunwei-ts-100-70 172.16.100.70 (elasticsearch)
yunwei-ts-100-70 172.16.100.71 (elasticsearch)
yunwei-ts-100-70 172.16.100.111 (elasticsearch)
软件版本: 2.4.1-1
```
#### 安装 Elasticsearch
###### 添加yum 签名key,
rpm --import 添加 elasticsearch.repo 到 /etc/yum.repos.d/ 目录
```
cat >/etc/yum.repos.d/elasticsearch.repo <<-EOF
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=2.1.3:安装软件包
```
yum install elasticsearch -y
```
###### 建立slasticsearch 存储数据的目录
```
mkdir -p /data/elasticsearch
chown elasticsearch.elasticsearch /data/elasticsearch
```
###### 2.1.4:调整配置文件
```
vi /etc/elasticsearch/elasticsearch.yml
cluster.name: ptsearch # 组名(同一个组,组名必须一致)
node.name: yunwei-ts-100-70 # 节点名称,建议和主机名一致
path.data: /data/elasticsearch # 数据存放的路径
path.logs: /var/log/elasticsearch/ # 日志存放的路径
bootstrap.mlockall: true # 锁住内存,不被使用到交换分区去
network.host: 0.0.0.0 # 网络设置
9200 # 端口
discovery.zen.ping.unicast.hosts: ["172.16.100.71","172.16.100.111"] #手动发现节点,写本机之外的集群节点IP地址
discovery.zen.ping.multicast.enabled: false #关闭多播模式
```
==以上配置3台elasticsearch节点都要配,注意nodename写每台主机的名称,discovery.zen.ping.unicast.hosts:xie写本机之外的集群节点IP地址。==
###### 2.1.5:添加开机启动
systemctl enable elasticsearch.service
###### 启动服务
systemctl start elasticsearch
###### 查看服务状态
```
systemctl status elasticsearch
..............
Process: 6470 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
Main PID: 6473 (java)
Memory: 280.2M
CGroup: /system.slice/elasticsearch.service
└─6473 /bin/java -Xms256m -Xmx1g -Djava.awt.headless=true
```
==注意:上面可以看出elasticsearch设置默认的内存最小256m,最大1g==
##### 2.1.6:检查,验证服务器端口
```
netstat -antlp |egrep "9200|9300"
tcp 0 0 172.16.100.70:9200 172.16.3.151:36013 SYN_RECV -
tcp 0 0 172.16.100.70:9200 172.16.3.151:36012 SYN_RECV -
tcp 0 0 127.0.0.1:35793 127.0.0.1:9200 TIME_WAIT -
tcp 0 0 127.0.0.1:35791 127.0.0.1:9200 TIME_WAIT -
tcp 0 0 127.0.0.1:35794 127.0.0.1:9200 TIME_WAIT -
tcp 0 0 127.0.0.1:35792 127.0.0.1:9200 TIME_WAIT -
tcp6 0 0 :::9200 :::* LISTEN 6473/java
tcp6 0 0 :::9300 :::* LISTEN 6473/java
tcp6 0 0 172.16.100.70:53651 172.16.6.24:9200 ESTABLISHED 19098/java
tcp6 0 1 172.16.100.70:35771 10.42.0.1:9200 SYN_SENT 19098/java
```
##### 启动两个端口
```
9200:集群之间事务通信
9300:集群选举等
```
##### elasticsearch 目录环境介绍:
```
Environment=ES_HOME=/usr/share/elasticsearch
Environment=CONF_DIR=/etc/elasticsearch
Environment=DATA_DIR=/var/lib/elasticsearch
Environment=LOG_DIR=/var/log/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/sysconfig/elasticsearch
```
## 验证服务接口响应
##### 通过浏览器访问:
返回数据如下:
```{ "name" : "yunwei-ts-100-70", 《《===节点名称 "cluster_name" : "ptsearch", 《《===集群名称 "version" : { "number" : "2.3.4", "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f", "build_timestamp" : "2016-06-30T11:24:31Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search"}```
##### 通过命令的方式查看数据(可以在node1本机上查看,也可以在其他机器上访问node的9200查看,如下)
```curl -i -XGET '-d '{"query":{"match_all":{}}}'HTTP/1.1 200 OKContent-Type: application/json; charset=UTF-8Content-Length: 95{ "count" : 2, "_shards" : { "total" : 1, 《《===集群加入节点后数据会变化 "successful" : 1, "failed" : 0 }}```##### 查看健康信息:curl -XGET '```{ "cluster_name" : "ptsearch", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 1, "active_shards" : 1, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 1, "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" : 50.0}```##### 查看节点数:curl -XGET '172.16.100.70:9200/_cat/nodes?v'```host ip heap.percent ram.percent load node.role master name 172.16.100.111 172.16.100.111 7 98 0.65 d m yunwei-ts-100-111 172.16.100.70 172.16.100.70 5 69 0.00 d * yunwei-ts-100-70 <<主节点172.16.100.71 172.16.100.71 7 97 0.00 d m yunwei-ts-100-71```##### 查看节点分片信息:curl -XGET '172.16.100.70:9200/_cat/indices?v'```health status index pri rep docs.count docs.deleted store.size pri.store.size green open .kibana 1 1 2 0 38.4kb 19.2kb green open .marvel-es-1-2016.10.11 1 1 1369 0 840.1kb 420kb green open .marvel-es-1-2016.10.10 1 1 4468 0 1.2mb 634.9kb```#### elasticsearch日志定期清理日志、索引
索引旧数据需要清理,清理所以可以使用Elasticsearch的API。
例如:
删除某个索引2016年11月份的所有索引,可以使用下面的命令:
```
curl -XDELETE 'ElasticSearch参数优化
(提高检索效率)
```
一、Linux操作系统优化
1) 调整系统资源最大句柄数
/etc/security/limits.conf
在文件中增加
* soft nofile 65536
* hard nofile 65536
2) 设置bootstrap.mlockall: 为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。
同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
3) 关闭文件更新时间
cat /etc/fstab
/dev/sda7 /data/elasticSearch ext4 defaults,noatime 0 0
4) 提高ES占用内存(elasticsearch.in.sh)
ES_MIN_MEM=30g (一般为物理内存一半,但不要超过31G)
ES_MAX_MEM=30g
官方建议:
二、Elasticsearch 字段缓存优化
```
1) Fielddata(字段数据)
Elasticsearh默认会将fielddata全部加载到内存。但是,内存是有限的,需要对fielddata内存做下限制:Indices.fieldata.cache.size 节点用于fielddata的最大内存,如果fielddata达到该阀值,就会把旧数据交换出去。默认设置是不限制,建议设置10%。
2) doc-values
其实就是在elasticsearch 将数据写入索引的时候,提前生成好fileddata内容,并记录到磁盘上。因为fileddata数据是顺序读写的,所以即使在磁盘上,通过文件系统层的缓存,也可以获得相当不错的性能。doc_values只能给不分词(对于字符串字段就是设置了 "index":"not_analyzed",数值和时间字段默认就没有分词) 的字段配置生效。
如相应字段设置应该是:
"@timestamp":{ "type":"date", "index":"not_analyzed", "doc_values":true, }
优化参考文档:
```
## 安装elasticsearch插件
安装部署访问下面博客页面:
elasticsearch 安装配置故障排查:
###### elasticsearch服务启动报错:
```
[2016-10-11 16:18:43,974][WARN ][bootstrap ] Unable to lock JVM Memory: error=12,reason=Cannot allocate memory
[2016-10-11 16:18:43,975][WARN ][bootstrap ] This can result in part of the JVM being swapped out.
[2016-10-11 16:18:43,975][WARN ][bootstrap ] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536
[2016-10-11 16:18:43,975][WARN ][bootstrap ] These can be adjusted by modifying /etc/security/limits.conf, for example:
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
[2016-10-11 16:18:43,975][WARN ][bootstrap ] If you are logged in interactively, you will have to re-login for the new limits to take effect.
[2016-10-11 16:18:44,165][INFO ][node ] [yunwei-ts-100-71] version[2.4.1], pid[31324], build[c67dc32/2016-09-27T18:57:55Z]
[2016-10-11 16:18:44,165][INFO ][node ] [yunwei-ts-100-71] initializing ...
[2016-10-11 16:18:44,719][ERROR][bootstrap ] Exception
部分内容省略
```
###### 解决办法:
```
1:修改启动文件
systemd:
/usr/lib/systemd/system/elasticsearch.service set: LimitMEMLOCK=infinity
SysV:
/etc/sysconfig/elasticsearch set: MAX_LOCKED_MEMORY=unlimited
Upstart:
/etc/default/elasticsearch set: MAX_LOCKED_MEMORY=unlimited
Then restart Elasticsearch.
2:在limit 文件添加配置如下:
/etc/security/limits.conf
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
```
---
## 2.2:安装配置Kibana
##### 2.2.1:添加yum 签名key,添加 kibana.repo 到 /etc/yum.repos.d/ 目录
```
rpm --import >/etc/yum.repos.d/kibana.repo <<-EOF
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=安装软件包,
软件版本: 4.5.4-1
```
yum install kibana -y
```
##### 调整配置文件
```
sudo vi /opt/kibana/config/kibana.yml
......
4 # The host to bind the server to.
5 # server.host: "0.0.0.0"
6 server.host: "0.0.0.0" #
7
8 # If you are running kibana behind a proxy, and want to mount it at a path,
9 # specify that path here. The basePath can't end in a slash.
10 # server.basePath: ""
11
12 # The maximum payload size in bytes on incoming server requests.
13 # server.maxPayloadBytes: 1048576
14
15 # The Elasticsearch instance to use for all your queries.
16 # elasticsearch.url: "elasticsearch.url: " #elasticsearch 地址 《=====
18..
```
==elasticsearch cluster地址,可以写多个节点,kibana 只会取最后一个连接,不支持多节点负载均衡和自动冗余==
```
elasticsearch.url: 2.2.5:添加开机启动,启动服务;
```
chkconfig --add kibana
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana
```
##### 检查,验证服务器端口
```
lsof -n -i:5601
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 29895 kibana 11u IPv4 9963707 0t0 TCP *:esmagent (LISTEN)
```
##### 验证访问:
2.4: 安装部署 Kibana Dashboards
##### -软件包
```
cd ~
curl -L -O 安装解压软件,解压软件包
```
sudo yum -y install unzip
unzip beats-dashboards-*.zip
```
##### 2.4.3:导入基础显示面板, 将数据导入 Elasticsearch 命令如下:
```
cd beats-dashboards-*
./load.sh
```
指向上面的命令将导入如下查询模板信息
```
[packetbeat-]YYYY.MM.DD
[topbeat-]YYYY.MM.DD
[filebeat-]YYYY.MM.DD
[winlogbeat-]YYYY.MM.DD
```
##### 访问页面,即可查看索引
2.3:安装配置 Logstash
##### 插件简介
![插件简介](官方参考信息:
添加yum 签名key:
```
rpm --import 添加 logstash.repo 到 /etc/yum.repos.d/ 目录
```
cat >/etc/yum.repos.d/logstash.repo <<-EOF
[logstash-2.4]
name=Logstash repository for 2.4.x packages
baseurl=install logstash -y
```
### 配置日志输入、输出
[tuopu](!2.3.4:调整配置文件vi /etc/logstash/conf.d/02-beats-input.conf```input { beats { port => 5044# ssl => true# ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"# ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" }}```
logstack 输入默认使用5044 端口,如果需要使用ssl 加密传输,可以配置自己证书
##### 创建一个配置文件,10-syslog-filter.conf ,添加 syslog messages,过滤配置。
sudo vi /etc/logstash/conf.d/10-syslog-filter.confnsert the following syslog filter configuration:```filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } }}```
配置完成保存退出,上面的配置是添加一个 syslog 的过滤标签,将输入的日志进行格式化并生成查询表;
##### 再创建一个配置文件 30-elasticsearch-output.conf:
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
添加日志输出配置如下:
```output { elasticsearch { hosts => ["172.16.100.70","172.16.100.71","172.16.100.111"] sniffing => true #单机模式关闭此选项 sniffing_delay => 5 manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" }}```
==协议:新插件支持三种协议: node,和 transpor。==
配置完成保存退出,这个配置主要实现logstash 将beats 收集的数据发送到elasticsearch ,
如果你想添加对其他应用程序使用的过滤器Filebeat输入,确保名称的文件所以他们之间的输入和输出配置(即02 - 30之间)。
##### 测试配置正确性,返回ok 为正常。sudo service logstash configtest##### 2.3.7:添加开机启动,启动服务;sudo chkconfig logstash onsudo /etc/init.d/logstash start==logstash 使用systemctl 有问题,具体原因待查==##### 检查,验证服务器端口```lsof -n -i:5044 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 13426 logstash 15u IPv6 88329771```
##### 使用 curl 命令发送请求来查看 ES 是否接收到了数据
curl '添加filebeat客户端##### 安装部署 Filebeat##### 添加yum 签名key:```rpm --import 添加 beats.repo 到 /etc/yum.repos.d/ 目录```cat >/etc/yum.repos.d/beats.repo <<-EOF[beats]name=Elastic Beats Repositorybaseurl=2.5.4:安装filebeat 服务sudo yum install filebeat -y##### 2.5.5:添加开机启动,启动服务sudo systemctl start filebeatsudo systemctl enable filebeat### 源码安装filebeat 服务##### 2.6.1:-软件包:curl -L -O 安装服务yum install filebeat-1.2.3-x86_64.rpm##### 配置服务:sudo vi /etc/filebeat/filebeat.yml我们将修改现有的发送日志文件配置,仅发送安全、消息日志。在路径下,注释掉——/var/log/*.日志文件。这将防止Filebeat发送所有日志。filebeat.yml ```... paths: - /var/log/secure - /var/log/messages# - /var/log/*.log...```然后找到指定的行document_type:取消它,改变它的值,“syslog”。filebeat.yml ```... document_type: syslog...```==上面的配置指定日志类型为syslog(类型,在Logstash过滤器中使用)==配置Filebeat连接Logstash服务器的端口5044。filebeat.yml ``` ### Logstash as output logstash: # The Logstash hosts hosts: ["ELK_server_private_IP:5044"]#配置日志最大装载量 bulk_max_size: 1024#配置ssl 证书信息,不使用ssl,忽略此配置filebeat.yml ... tls: # List of root certificates for HTTPS server verifications certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]This configures Filebeat to use the SSL certificate that we created on the ELK Server.```保存退出##### 2.6.4:添加开机启动,启动服务sudo systemctl start filebeatsudo systemctl enable filebeat完成以上配置,Filebeat将发送你的syslog消息和secure到你的ELK服务器,其它节点重复以上配置即可。##### filebeat 调试命令;whereis filebeatfilebeat: /usr/bin/filebeat /etc/filebeat##### 测试配置正确性filebeat -configtest -e以上配置设置ok,Filebeat(客户端)会将数据发送Logstash发送日志到elk服务器上。Logstash应该Filebeat数据加载到Elasticsearch日期戳的指数,filebeat-YYYY.MM.DD。##### 导入 Filebeat 索引模板到 Elasticsearch```我们计划使用filebeat 处理日志到elasticsearch 收下要导入一个配置模板,elasticsearch 将按照模板格式对数据进行处理;##### 先-一个filebeat模板到本地目录;cd ~curl -O 执行模板导入命令curl -XPUT '-d@filebeat-index-template.json##### 执行成功返回结果如下{ "acknowledged" : true}```##### 确认elk 服务器是否收到数据,测试命令如下,在elk 服务器执行```curl -XGET '2.6.7:导入模板命令:curl -XPUT '-d@/etc/filebeat/filebeat.template.json#####参考文档:```
https://elastic.co/guide/en/beats/filebeat/current/index.html
https://elastic.co/guide/en/beats/libbeat/1.2/setup-repositories.html
http://blog.smoker.cc/docker/20160325.html
https://digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7
http://tuicool.com/articles/YfAjI3a
安装Logstash:https://elastic.co/guide/en/beats/libbeat/1.2/setup-repositories.html
```
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~