The screenshot I upload not use web log, I use Python to make source data insert into ElasticSearch. So we need not to care about data from.
Here is the my code to test bulk, anything wrong?

    #!/usr/bin/env python2.7
    # -*- coding:utf-8 -*-

    import time
    import traceback
    import multiprocessing
    from elasticsearch import Elasticsearch
    from elasticsearch.helpers import bulk

    def es_data():
        for i in xrange(1000):
            try:
                yield {
                    "_index": "protocol",
                    "_type": "http",
                    "_source": {
                        "protocol": "http",
                        "uid": "C3ttfj3cobPd3RtZHl",
                        "status_code": 200,
                        "sensor_ip": "10.0.*.*",
                        "city": "",
                        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38",
                        "src_ip": "10.0.*.*",
                        "method": "GET",
                        "es_type": "http",
                        "timestamp": int(time.time() * 1000),
                        "URI": "/editor_styles/styles?inajax=1&page=2&filter=.tagtpl-226&sort=undefined",
                        "host": "www.test.com",
                        "src_port": "54753",
                        "response": {
                            "body":  body,
                            "header": {
                                "Access-control-allow-methods": "GET,POST,OPTIONS",
                                "End": "Y8",
                                "X-powered-by": "PHP/7.0.7",
                                "Transfer-encoding": "chunked",
                                "Set-cookie": "SERVERID=393aa09ade25525598196ea9e53fbf93|1508152416|1508151243;Path=/",
                                "Content-encoding": "gzip",
                                "Vary": "Accept-Encoding",
                                "Connection": "keep-alive",
                                "Date": "Mon, 16 Oct 2017 11:13:37 GMT",
                                "Access-control-allow-origin": "*",
                                "Access-control-allow-headers": "X-Requested-With",
                                "Content-type": "text/html; charset=UTF-8"
                            },
                            "response_line": "HTTP/1.1 200 OK"
                        },
                        "url": "www.test.com/editor_styles/styles?inajax=1&page=2&filter=.tagtpl-226&sort=undefined",
                        "country": "中国",
                        "request": {
                            "username": "",
                            "body": "",
                            "host": "www.test.com",
                            "request_line": "GET /editor_styles/styles?inajax=1&page=2&filter=.tagtpl-226&sort=undefined HTTP/1.1",
                            "header": {
                                "Accept-language": "zh-cn",
                                "Accept-encoding": "gzip, deflate",
                                "Connection": "keep-alive",
                                "Accept": "text/html, */*; q=0.01",
                                "User-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38",
                                "Dnt": "1",
                                "Host": "www.test.com",
                                "X-requested-with": "XMLHttpRequest",
                                "Referer": "http://www.test.com/"
                            },
                            "body_len": 0,
                            "password": "",
                            "range_request": False,
                            "method": "GET"
                        },
                        "dst_port": "80",
                        "dst_ip": "120.*.*.*"
                    }
                }
            except:
                print traceback.print_exc()
    def write():
        while True:
            es = Elasticsearch('127.0.0.1:9200')
            start = time.clock()
            success, _ = bulk(es, es_data())
            end = time.clock()
            print end - start
    def do_work():
        for i in xrange(50):
            process = multiprocessing.Process(target=write())
            process.start()

    if __name__ == '__main__':
        do_work()

NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB