elk集群安装配置详解

网友投稿 1221 2022-09-28

elk集群安装配置详解

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小时内删除侵权内容。

上一篇:关于两个BeanUtils.copyProperties()的用法及区别
下一篇:ceph升级到10.2.3 版本启动服务报错:Unknown lvalue 'TasksMax' in section 'Service'
相关文章

 发表评论

暂时没有评论,来抢沙发吧~