Linux, 应用部署

ELK的搭建

ELK是一套开源的日志分析系统,由elasticsearch+logstash+Kibana组成。
先一句话简单了解E,L,K这三个软件elasticsearch: 分布式搜索引擎,也是数据库;logstash: 日志收集与过滤,输出给elasticsearch ;Kibana: 图形化展示

一、前期准备工作

1、四台机器(内存大于1G,建议大于2G)

2、关闭防火墙和selinux

3、时间同步

二、elasticsearch部署

1、安装jdk(不要使用系统自带openjdk)

yum -y install jdk1.8 

2、es的安装

yum -y install elasticsearch

3、单机es的配置与服务启动

[root@node1~]# grep -Ev "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: class1
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200

4、查看状态

[root@node1~]# systemctl start elasticsearch
[root@node1~]# netstat -anlpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      3143/java

5、elasticsearch集群部署

(1)在两个节点上安装ES,并都设置hosts为:

[root@node2~]# cat /etc/hosts
192.168.168.144 node2
192.168.168.143 node1
(2)修改每个节点的ES配置文件如下:
[root@node1~]# grep -Ev "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: class1
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

[root@node2~]# grep -Ev "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: class1
node.name: node-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

6、elasticsearch基础概念

主要的基础概念有:Node, Index,Type,Document,Field,shard和replicas.
Node(节点):运行单个ES实例的服务器
Cluster(集群):一个或多个节点构成集群
Index(索引):索引是多个文档的集合
Type(类型):一个Index可以定义一种或多种类型,将Document逻辑分组
Document(文档):Index里每条记录称为Document,若干文档构建一个Index
Field(字段):ES存储的最小单元
Shards(分片):ES将Index分为若干份,每一份就是一个分片
Replicas(副本):Index的一份或多份副本


为了便于理解,我们和mysql这种关系型数据库做一个对比:

ES是分布式搜索引擎,每个索引有一个或多个分片(shard),索引的数据被分配到各个分片上。你可以看作是一份数据分成了多份给不同的节点。
当ES集群增加或删除节点时,shard会在多个节点中均衡分配。默认是5个primary shard(主分片)和1个replica shard(副本,用于容错)。

7、elaticsearch基础API操作

查看ES集群状态:http://127.0.0.1:9200/_cluster/health?pretty

查看节点信息:http://127.0.0.1:9200/_cat/nodes?v

green:所有的主分片和副本分片都已分配。你的集群是100%可用的。
yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依
然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 
yellow 想象成一个需要及时调查的警告。
red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数
据,而分配到这个分片上的写入请求会返回一个异常。

新增索引:curl -X PUT http://127.0.0.1:9200/nginx_access_log

查看索引信息:http://127.0.0.1:9200/_cat/indices?v

删除索引:curl -X DELETE http://127.0.0.1:9200/nginx_access_log

三、logstash部署

1、简介

2、logstash部署

(1)安装jdk
 yum -y install jdk1.8 
(2)安装logstash
 yum -y install logstash
(3)修改主配置文件
[root@localhost ~]# grep -v "^#" /etc/logstash/logstash.yml
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d/
path.logs: /var/log/logstash
(4)添加子配置文件
[root@localhost ~]# cat /etc/logstash/conf.d/test.conf
input {
  file {
    path => "/var/log/yum.log"
    start_position => "beginning"
    type => "yum"
}
  file {
    path => "/var/log/messages"
    start_position => "beginning"
    type => "messages"
}
  beats {
    port => 5044
    type => "beats"
}
}
output {
  if [type] == "messages" {
    elasticsearch {
      hosts => ["192.168.168.143:9200","192.168.168.144:9200"]
      index => "messages-%{+YYYY.MM.dd}"
}
}
  if [type] == "yum" {
    elasticsearch {
      hosts => ["192.168.168.143:9200","192.168.168.144:9200"]
      index => "yum-%{+YYYY.MM.dd}"
}
}
  if [type] == "beats" {
    elasticsearch {
      hosts => ["192.168.168.143:9200","192.168.168.144:9200"]
      index => "beats-%{+YYYY.MM.dd}"
}
}
}

3、日志采集

[root@logstash ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf

4、浏览采集的日志

四、Kibana安装配置

(1)安装配置
[root@kibana ]#yum -y  install kibana
[root@kibana ]# grep -Ev "^(#|$)" /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.168.144:9200"
-----------------------------------------
[root@kibana ]#systemctl start kibana
(2)汉化
unzip kibana-hanghua-master.zip
cd Kibana_Hanization-master/old
python main.py /usr/share/kibana/
systemctl restart kibana

五、filebeat的安装配置

yum -y install filebeat

配置filebeat采集日志后提交给logstash
[root@filebeat]# grep -Ev "^[[:space:]]*(#|$)" /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/secure
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.logstash:
  hosts: ["192.168.168.147:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
--------------------------------------------------------------------------
systemctl start filebeat

注意事项

1、logstash启动报错往往是配置文件的格式不正确,需要特别注意yml格式的配置文件书写格式。

2、filebeat不采集数据,没有采集动作,也没有网络连接有可能是采集的日志文件没有内容需要采集。

3、YMAL格式说明

以.yaml或.yml结尾 
(1)文件的第一行以 "---"开始,表明YMAL文件的开始(可选的) 
(2)以#号开头为注释 
(3)列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格) 
(4)一个字典是由一个简单的 "键:值" 的形式组成(这个冒号后面必须是一个空格) 
(5)注意: 写这种文件不要使用tab键,必须使用空格

Leave a Reply