ELK 监控平台搭建

elasticSearch-7.5.1

1.下载tar.gz 源码包


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz

2. 不能使用root 用户启动

由于es无法使用root用户启动(官方建议:由于elasticsearch可以接收用户输入的脚本并且执行,为了系统安全考虑, 建议创建一个单独的用户用来运行elasticsearch),因此我们需要创建一个用户组,并在该用户组下创建用户,便于管理。


# 创建用户组。注意:此处的用户组名称自定义即可

groupadd elsearch

# 创建用户。注意:此处的用户名和密码自定义即可

useradd elsearch -g elsearch -p yourPassword 

# 为用户分配文件夹操作权限。注意:此处需输入你创建的用户组和用户名称,文件夹需指定为elasticsearch的所在文件夹。

chown -R elsearch:elsearch ./elk/

3.登录elsearch用户,解压es压缩包,修改配置文件保存后启动。


 tar -zxvf elasticsearch-7.5.1-linux-x86_64.tar.gz

mv elasticsearch-7.5.1 elasticsearch

cd elasticsearch/config

vim elasticsearch.yml

elasticsearch.yml配置文件修改项如下:


## elasticsearch.yml中添加如下配置,支持跨域访问

http.cors.enabled: true

http.cors.allow-origin: "*"

network.host: 0.0.0.0 # 监听全部ip,注意:在实际环境中应设置为一个安全的ip

http.port: 9200 # es服务的端口号

xpack.security.enabled: true # 开启认证,注意:若无需开启则可不设置该配置

discovery.type: single-node # 单节点配置,注意:该配置需根据实际需求进行配置。

action.auto_create_index: true

index.mapper.dynamic: true

jvm.options配置文件修改项如下:

调整elasticsearch jvm.options的堆内存大小。注意:如果内存足够可以调整为当前服务器内存的一半大小,但是不要超过32g,因为官方不推荐。jvm超过32g后指针压缩效果失效。本文服务器内存大小为16g,因此配置为8g。

vim jvm.options


-Xms8g

-Xmx8g

修改完成后保存配置并启动es,直接启动和后台启动的命令如下:


# 直接启动

./elasticsearch/bin/elasticsearch

# 后台启动

./elasticsearch/bin/elasticsearch -d

# 停止

ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}'

kill -9 进程号

4.设置内置用户密码(若未开启认证配置则忽略此步骤):


# 为es内置用户设置初始密码,默认密码为changeMe,密码全部设置为了elastic

./elasticsearch/bin/elasticsearch-setup-passwords interactive

解决:使用ll命令查看config下文件的属主信息,发现elasticsearch.keystore文件是属于root用户的 将该文件为当前用户赋予权限就可以了

5.检查单实例集群运行情况(若开启ES认证,则建议使用postMan调用es内置接口,这样权限比较好添加。)shell调用接口例子如下:


# 检查单实例集群运行情况

curl -X GET "localhost:9200/_cat/health?v" # localhost需替换为实际的es地址

# 获取集群节点情况

curl -X GET "localhost:9200/_cat/nodes?v" # localhost需替换为实际的es地址

# 列出所有指数

curl -X GET "localhost:9200/_cat/indices?v" # localhost需替换为实际的es地址

# 新增一个文档

curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H # localhost需替换为实际的es地址

'Content-Type: application/json' -d'

{

  "name": "John Doe"

}

'                                                                                      

# 删除一个文档

curl -X DELETE "localhost:9200/customer?pretty" # localhost需替换为实际的es地址

# 列出所有索引

curl -X GET "localhost:9200/_cat/indices?v" # localhost需替换为实际的es地址

# 获取某个文档。在查询参数中加上pretty 会调用pretty-print功能,将json格式化打印

curl -X GET "localhost:9200/customer/_doc/1?pretty" # localhost需替换为实际的es地址

# 删除索引

curl -X DELETE "localhost:9200/_all" # localhost需替换为实际的es地址

curl -X DELETE "localhost:9200/dev_*" # localhost需替换为实际的es地址

elasticsearch-head

docker 安装

github地址: elasticsearch-head

1.下载镜像

docker pull mobz/elasticsearch-head:5

2.启动服务

docker run -d --name elasticsearch-head -p 9100:9100 docker.io/mobz/elasticsearch-head:5

3.访问首页,连接es访问,若连接不上,需要在es的配置文件中添加允许跨域访问,并重启elasticsearch。


# elasticsearch.yml中添加如下配置,支持跨域访问

http.cors.enabled: true

http.cors.allow-origin: "*"

--注意--:若es添加了权限校验的配置,则访问es-header时需要添加授权用户。否则&符号后面的参数均不需添加,例子如下:

注意:此处的localhost需替换为实际的elasticsearch-head地址

http://localhost:9100/?base_uri=http://localhost:9200&auth_user=elastic&auth_password=changeMe

logstash

1.下载tar.gz 源码包


https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz

2.解压,调整配置文件,参数修改完成后保存即可


tar -zxvf logstash-7.5.1.tar.gz 

mv logstash-7.5.1 logstash

cd logstash/config

cp logstash-sample.conf syslog.conf

vim syslog.conf

示例配置如下:


input {

  beats {

    # 端口信息

    port => 5044

  }

}

# 对filebeat中传输过来的信息进行过滤

filter {

   mutate {

      rename => { "[host][name]" => "host" }

   }

   # 排除tag中无用的参数,避免生成的ES索引格式有问题。注意:若不操作filebeat的tag时则无需该if条件及里面的mutate配置

   if "beats_input_codec_plain_applied" in [tags] {

        mutate {

            remove_tag => ["beats_input_codec_plain_applied"]

        }

    }

   # 标准配置,若无特殊需求可不做修改

   grok {

       match => { "message" => [

            "\[%{TIMESTAMP_ISO8601:logtime}\]\s*\[%{LOGLEVEL:loglevel}\]\s*\[%{IPORHOST:instancehost}\]\s*\[%{DATA:module}\]\s*%{JAVACLASS:class}\s*\[pic:%{DATA:pic}\]\s*\[%{DATA:keys}\]\s*%{GREEDYDATA:content}",

            "\[%{TIMESTAMP_ISO8601:logtime}\]\s*\[%{LOGLEVEL:loglevel}\]\s*\[%{IPORHOST:instancehost}\]\s*\[%{DATA:module}\]\s*%{JAVACLASS:class}\s*\[pic:%{DATA:pic}\]\s*%{GREEDYDATA:content}",

            "\[%{TIMESTAMP_ISO8601:logtime}\]\s*%{GREEDYDATA:content}",

            "%{GREEDYDATA:content}"

       ]}

    }

    # 标准配置,若无特殊需求可不做修改

    date {

        match => [ "logtime", "ISO8601", "yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss,SSS", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss,SSS" ]

        target => "@timestamp"

        timezone => "Asia/Shanghai"

    }

}

# 配置输出到ES中的索引格式

output {

  elasticsearch {

    # elasticsearch的hosts地址。注意:需将localhost修改为实际的地址

    hosts => ["http://localhost:9200"]

    # 以filebeat定义的tags为前缀,日期为后缀组成索引,例如:(integration_dev-hzero-platform-2019.11.02)。注意:该配置需修改为实际想要的索引格式。

    index => "%{[tags]}-%{+YYYY.MM.dd}"

    # elastic用户名

    user => "elastic"

    # 注意:此处的密码需修改为实际elastic用户的密码,未修改时默认为changeMe,建议统一进行修改

    password => "changeMe"

  }

}

注意:上述配置中需要重点关注filter部分以及output部分的配置内容,在配置时需根据实际需求来修改相应的配置项,需修改的地方文中均有注释进行标注。

3.启动logstash


# 直接启动

./logstash -f ../config/syslog.conf 

# 后台启动

nohup ./bin/logstash -f ./config/syslog.conf &

# 停止

ps -ef | grep logstash | grep -v grep | awk '{print $2}'

kill -9 进程号

kibana-7.5.1

1.下载tar.gz源码包


wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz

2.解压,调整配置文件,参数修改完成后保存即可


tar -zxvf kibana-7.5.1-linux-x86_64.tar.gz

mv kibana-7.5.1-linux-x86_64 kibana

cd kibana/config

vim kibana.yml

示例配置如下:


server.port: 5601 # Kibana端口号

server.host: "localhost" # kibana地址。注意:该配置需修改为实际kibana的host地址。

elasticsearch.hosts: ["http://localhost:9200"] # kibana连接es的host。注意:该配置需修改为实际es的host地址。

elasticsearch.username: "elastic" # es用户名,当es开启认证授权时需要配置。

elasticsearch.password: "changeMe" # es密码,当es开启认证授权时需要配置,该配置需修改为实际elastic账户的密码。

i18n.locale: "zh-CN" # 配置中文Kibana环境。注意:该配置按需进行配置,不加时默认为英文操作环境。

3.启动Kibana


# 直接启动

./bin/kibana

# 后台启动

nohup ./bin/kibana &

查看日志

tail -f /home/elsearch/nohup.out

# 停止

netstat -tunlp|grep 5601

kill -9 进程号

[图片上传失败...(image-5e5671-1597722404795)]

elasticsearch-analysis-ik

安装 elasticsearch-analysis-ik


mkdir elasticsearch-analysis-ik

cd elasticsearch-analysis-ik

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip

unzip elasticsearch-analysis-ik-7.5.1.zip

mv elasticsearch-analysis-ik/ /u01/elk7.5.1/elasticsearch/plugins/

cd /u01/elk7.5.1/elasticsearch/plugins/

至此我们的elk环境已经初步搭建完成,下面就需要将搜集到的日志信息与elk日志监控平台进行对接。

-搭建问题记录


问题:

1.单机部署elk时,集群健康值总是为red,排查原因是因为存在副本分片数导致不稳定。

解决方式是在elasticsearch-header中或postman中执行复合查询。

请求路径如下:

http://localhost:9200/_template/template_http_request_record,(注意:请求中的localhost需替换为实际的es地址)

传参如下:

{"index_patterns":["*"],"settings":{"number_of_shards":1,"number_of_replicas":0}}

执行返回{"acknowledged": true}说明修改成功,此时在启动logstash和filebeat传输数据,es创建的索引主分片是1,副本分片是0

注意:elasticsearch的主分片和副本分片不可以存在于同一节点上。否则会出问题

2.部署elk后索引状态为UNASSIGNED(UNASSIGNED原因:Too many open files)

此时需要在es用户下执行ulimit -a 查看当前用户的open file数量,默认1024,然后在root用户下执行

vim /etc/security/limits.conf文件,在文件中添加配置:

elsearch soft nofile 65535

elsearch hard nofile 65535

迁移elasticSearch目录

1.修改/etc/elasticsearch/elasticsearch.yml文件,


修改数据文件存储位置:

   默认位置: path.data: /path/to/data

   修改为: path.data: /data/elasticsearch/data

修改日志文件存储位置:

   默认位置:  path.logs: /path/to/logs

   修改为: path.logs: /data/elasticsearch/logs

2. 新建目录


chown -R elsearch:elsearch elasticsearch

cd /u01/elk7.5.1/elasticsearch/data

mv *  /data/elasticsearch/data/

cd /u01/elk7.5.1/elasticsearch/logs

mv * /data/elasticsearch/logs/

问题解决

1. 权限问题

Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied

解决方法:

因为第一次启动不小心用了root启动,导致用root生成了对应的文件。切换es账号之后,没有对应文件的权限导致,删除相关的东西即可。

2. max number of threads [1024]


ERROR: [2] bootstrap checks failed

[1]: max number of threads [1024] for user [es] is too low, increase to at least [4096]

[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决:


ulimit -a

max user processes (-u) 1024

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited


vi /etc/security/limits.d/90-nproc.conf 

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

* hard nproc 4096

* soft nproc 4096

* soft nproc 4096

root soft nproc unlimited

3. system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk


原因:

这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。

解决:

在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:

bootstrap.memory_lock: false

bootstrap.system_call_filter: false

4.Elasticsearch报错:


启动报错:[WARN ][r.suppressed ] [node-1] path: /.kibana_task_manager/_search, params: {ignore_unavailable=true, index=.kibana_task_manager} org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed;

这个错是索引分片的问题,一般如果没有用过此索引直接删除此索引即可。

curl -XDELETE http://localhost:9200/.kibana_task_manager

启动报错:No shard available for [get [.kibana][_doc][space:default]: routing [null]]

这个错是因为安装的时候Elasticsearch是单节点,但是分片默认有一个副分区,所以报此警告

Elasticsearch状态一直为yellow

这个也是因为Elasticsearch单节点导致,具体原因请参考如下文章

参考:
https://blog.csdn.net/gamer_gyt/article/details/53230165

https://blog.csdn.net/quicknet/article/details/43915417

https://blog.csdn.net/weixin_34399060/article/details/92382701

你可能感兴趣的:(ELK 监控平台搭建)