ELK日志分析系统

ELK日志分析系统node

系统版本:linux

               CentOS release 6.9bootstrap

软件版本:vim

              jdk-8u121-linux-x64缓存

              elasticsearch-5.5.1服务器

              x-pack-5.5.1架构

              logstash-2.3 .2cors

              kafka_2.11-0.10.0.0运维

              zookeeper-3.4.9jvm

              kibana-5.5.1

              elasticsearch-head

              filebeat-1.2.3

 

ELK做用:

                随着业务量的增加,天天业务服务器将会产生上亿条的日志,单个日志文件达几个GB,这时咱们发现用Linux自带工具,cat grep awk 分析愈来愈力不从心了,并且除了服务器日志,还有程序报错日志,分布在不一样的服务器,查阅繁琐。

能解决的痛点:

                一、大量不一样种类的日志成为了运维人员的负担,不方便管理;

                二、单个日志文件巨大,没法使用经常使用的文本工具分析,检索困难;

                三、日志分布在多台不一样的服务器上,业务一旦出现故障,须要一台台查看日志。

系统架构图:

image.png

#备注:咱们一共使用三台机器,因此具体得配置和架构图有所出入,具体根据现实状况来配置

第一层、数据采集层

最左边的是业务服务器集群,上面安装了filebeat作日志采集,同时把采集的日志分别发送给两个logstash服务。

第二层、数据处理层,数据缓存层

logstash服务把接受到的日志通过格式处理,转存到本地的kafka broker+zookeeper 集群中。

第三层、数据转发层

这个单独的Logstash节点会实时去kafka broker集群拉数据,转发至ES DataNode。

第四层、数据持久化存储

ES DataNode 会把收到的数据,写磁盘,建索引库。

第五层、数据检索,数据展现

ES Master + Kibana 主要协调ES集群,处理数据检索请求,数据展现。

 

#公司自身使用架构图分析

image.png

第一层、elasticsearch集群

              elasticsearch一共四个节点,两个主节点,两个数据节点,其中一台机器上部署两个节点一个数据节点一个主节点,另外两台每台部署一个节点

第二层、logstash数据采集

             两个logstash收集客户端filebeat发送来的数据,而且存入kafka集群,再用另外一个logstash从kafka集群取出数据,将数据发送到elasticsearch的数据节点

第三层、kafka集群

             三台机器都安装了kafka集群,数据会同步,因此不论哪一台挂了,都不会影响数据的正常

 

系统调优,JVM调优:

            # 配置系统最大打开文件描述符数

            vim /etc/sysctl.conf

            fs.file-max=65535

# 配置进程最大打开文件描述符

             vim /etc/security/limits.conf

             # End of file

            * soft nofile 131072

            * hard nofile 131072

            * soft nproc 2048

            * hard nproc 4096

 

jdk模块安装:

上传1.8版本或者以上得JDK到/usr/local/,而后解压配置/etc/profile,配置项以下:

export JAVA_HOME=/usr/local/jdk1.8.0_121

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

elasticsearch模块安装与配置:

#备注:由于elasticsearch不容许使用root用户来启动,因此咱们要新建一个用户来启动,我这边使用elk可自行定义

useradd -m -d /opt/elk elk

#上传elstacisearch到/opt/elk,解压修改配置

#修改elk占用得最小最大内存,我将主节点设置为2g得内存,data数据节点设置为6g内存,主要状况看自身机器配置来设定

vim /opt/elk/elasticsearch5_1/config/jvm.options

-Xms2g

-Xmx2g

#由于咱们须要一个用户要经过用户名和密码来登录kibana因此咱们要把elasticsearch和kibana都安装x-pack这个插件

/opt/elk/elasticsearch5_1/bin/elasticsearch-plugin install file:/opt/elk/x-pack-5.5.1.zip

#修改elasticsearch得配置,具体配置以下

# ---------------------------------- Cluster -----------------------------------

#设置elasticsearch组得命名

cluster.name: elk_log

# ------------------------------------ Node ------------------------------------

#设置此节点是不是主节点,主节点来控制其余得数据节点,我自身设置了两个主节点,两个数据节点

node.name: elk_node1

node.master : true

node.data : false

# ----------------------------------- Paths ------------------------------------

#设置日志路径和数据路径

path.data: /opt/elk/elasticsearch5_1/elk/data

path.logs: /opt/elk/elasticsearch5_1/elk/logs

# ----------------------------------- Memory -----------------------------------

#是否锁定内存

bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------

#设置此节点得Ip和绑定得端口

network.host: 192.168.172.110

http.port: 9201

transport.tcp.port : 9301

# --------------------------------- Discovery ----------------------------------

#设置主节点得地址,和能存在几个主节点

discovery.zen.ping.unicast.hosts: ["192.168.172.110:9301", "192.168.172.112:9302"]

discovery.zen.minimum_master_nodes: 1

# ---------------------------------- X-pack -------------------------------------

#这样不设置的话启动的时候会又error报错

bootstrap.system_call_filter: false

#这是head插件须要的参数,可是若是开启了head那么xpack.security.enabled必需要设置成false否则须要输入密码head获取不到状态,数据节点能够不加

http.cors.enabled: true

http.cors.allow-origin: "*"

#设置是否开启密码验证

xpack.security.enabled: true

#设置是否开启监控

xpack.monitoring.enabled: true

xpack.graph.enabled: false

#设置自动建立索引

action.auto_create_index: true

#其余几个节点若是是主节点就跟上面这个同样配置,不过Node部分的node.name、Network部分的所有、Paths部分的所有须要修改其余的配置都不变。若是是数据节点的话Node部分的所有都要修改要把node.master改为false node.data改为true、Network的部分所有修改、Paths的部分所有修改

另外data节点的/opt/elk/elasticsearch5_1/config/jvm.options更具自身机器的性能修改为了6G

#备注:大体得配置就是上面这些了,下面就是启动了./bin/elasticsearch -d 表示后台启动,不过第一次启动得时候先不要加-d来看一下elasticsearch启动是否正常

 

kafka和zookeeper模块安装配置:

zookeeper:

#上传zookeeper到/opt目录下解压

tar zxf zookeeper-3.4.9.tar.gz

#编辑zookeeper配置文件zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/zookeeper_data

clientPort=2181

#我这里三台服务器组了一个集群因此每一台上面都要安装zookeeper并添加下面得配置

server.1=192.168.172.110:12888:13888

server.2=192.168.172.111:12888:13888

server.3=192.168.172.112:12888:13888

#要建立一个myid文件,每一台都要写入本身对应得数字(数字参考上面得server)

echo 1 > /opt/zookeeper_data/myid

#启动zookeeper和查看状态

/opt/zookeeper/bin/zkServer.sh start

/opt/zookeeper/bin/zkServer.sh status

#备注:其余两台zoo.cfg配置都相同不一样的是对应server.2 和server.3 去建立myid

kafka:

#编辑kafka配置文件server.properties

#kafka server id

broker.id=1

#port

port = 9092

host.name = 192.168.172.110

#线程设置

num.network.threads=9

num.io.threads=16

#此处默认

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

#默认配置日志路径要修改

log.dirs=/opt/kafka-logs

num.partitions=1

num.recovery.threads.per.data.dir=1

log.flush.interval.messages=10000

log.flush.interval.ms=3000

#抓取得日志要保存多久(小时)

log.retention.hours=12

#日志多大分割

log.segment.bytes=1073741824

#多久检测一次

log.retention.check.interval.ms=300000

#配置zookeeper地址和超时时间

zookeeper.connect=192.168.172.110:2181,192.168.172.111:2181,192.168.112:2181

zookeeper.connection.timeout.ms=6000

#备注:另外两台相同,就是broker.id要修改一下

#写入/etc/hosts三台机器的hostname和ip地址每一台都要写

#kafka启动命令:kafka-server-start.sh -daemon config/server.properties

#kafka新建topic

./bin/kafka-topics.sh --create --zookeeper 192.168.169.79:2181 --replication-factor 3 --partitions 2 --topic (主题名字) ecplogs --replication-factor (有几个节点就写多少)

#列出有那些topics

./bin/kafka-topics.sh --list --zookeeper 192.168.169.79:2181

#删除一个消息主题topics

./bin/kafka-topics.sh --zookeeper (全部集群的zookeeper) --delete --topics ecplogs

#备注:创建topic分区可让你把两个不一样部门的业务放到不一样的分区里面

 

filebeat模块配置:

#上传filebeat到须要采集数据的客户端/opt下而且解压

vim filebeat.yml

#就写一下格式如何写

filebeat:

prospectors:

-

paths:

- "/opt/access-common/access-common/logs/access-common.log"

input_type: log

document_type: access-common

output:

logstash:

#经过5044端口去让logstash接收

hosts: ["192.168.172.111:5044","192.168.172.112:5044"]

               #备注:添加其余项目的日志地址和type只要添加标红的这个格式就能够了

 

logstash模块配置:

#logstash有接收filebeat和转发到elasticsearch data节点两个配置,由于公司要看完整日志,因此不作任何得规则

#接收filebeat的logstash,上传logstash到/opt/解压修改配置文件logstash_filebeat.conf

input {

beats {

codec => multiline {

pattern => "^2017"

negate => true

what => "previous"

}

port => 5044

}

}

output {

kafka {

bootstrap_servers => "192.168.172.110:9092,192.168.172.111:9092,192.168.172.112:9092"

topic_id => "paylog"

}

}

#发送到elasticsearch的logstash的配置,只启动一个发送到elasticsearch data节点就足够了

input{

kafka {

group_id => "logstash"

topic_id => "paylog"

reset_beginning => false

consumer_threads => 50

decorate_events => true

zk_connect => "192.168.172.110:2181,192.168.172.111:2181,192.168.112:2181"

}

}

output {

########################174.85#######################

if [type] == "3rd-adv-access" {

elasticsearch {

hosts => ["192.168.172.110:9203","192.168.172.111:9204"]

index => "3rd-adv-access-%{+YYYY.MM.dd}"

manage_template => true

user => elastic password => skymobi

}

}

}

#备注:logstash启动命令 ./bin/logstash -w 10 -b 2000 -f ../config/logstash_data.conf

 

kibana模块的安装和配置:

 

#上传kibana到/opt解压,由于要使用密码登录kibana因此kibana要安装x-pack插件

./bin/kibana-plugin install file:/opt/elk/x-pack-5.5.1.zip

#修改kibana配置文件kibana.yml

server.port: 5601

server.host: "192.168.172.110"

#配置elasticsearch主节点的地址,若是一个挂了他会检测另外一个

elasticsearch.url: "http://192.168.172.110:9201"

elasticsearch.url: "http://192.168.172.112:9202"

#设置登录kibana的时候的帐号密码

elasticsearch.username: "elastic"

elasticsearch.password: "skymobi"

xpack.security.enabled: true

xpack.monitoring.enabled: true

xpack.graph.enabled: false

xpack.reporting.enabled: false

#备注:kibana启动命令 nohup /opt/kibana/bin/kibana &

相关文章
相关标签/搜索